1. ホーム
  2. c#

[解決済み] ファイルが存在しない場合にファイルを作成する

2023-04-22 11:32:42

質問

ファイルが存在しない場合、create else append を読み取るコードを作成する必要があります。今、それはそれが存在する場合、作成と追加を読んでいます。以下はそのコードです。

if (File.Exists(path))
{
    using (StreamWriter sw = File.CreateText(path))
    {

私ならこうする?

if (! File.Exists(path))
{
    using (StreamWriter sw = File.CreateText(path))
    {

編集する

string path = txtFilePath.Text;

if (!File.Exists(path))
{
    using (StreamWriter sw = File.CreateText(path))
    {
        foreach (var line in employeeList.Items)
        {
            sw.WriteLine(((Employee)line).FirstName);
            sw.WriteLine(((Employee)line).LastName);
            sw.WriteLine(((Employee)line).JobTitle);
        }
    }
}
else
{
    StreamWriter sw = File.AppendText(path);

    foreach (var line in employeeList.Items)
    {
        sw.WriteLine(((Employee)line).FirstName);
        sw.WriteLine(((Employee)line).LastName);
        sw.WriteLine(((Employee)line).JobTitle);
    }
    sw.Close();
}

}

どのように解決するのですか?

単純に

using (StreamWriter w = File.AppendText("log.txt"))

ファイルが存在しない場合は作成し、追記するためにファイルを開きます。

編集します。

これで十分です。

string path = txtFilePath.Text;               
using(StreamWriter sw = File.AppendText(path))
{
  foreach (var line in employeeList.Items)                 
  {                    
    Employee e = (Employee)line; // unbox once
    sw.WriteLine(e.FirstName);                     
    sw.WriteLine(e.LastName);                     
    sw.WriteLine(e.JobTitle); 
  }                
}     

しかし、どうしても最初にチェックしたい場合は、このようにすることもできますが、意味がわかりません。

string path = txtFilePath.Text;               


using (StreamWriter sw = (File.Exists(path)) ? File.AppendText(path) : File.CreateText(path))                 
{                      
    foreach (var line in employeeList.Items)                     
    {                         
      sw.WriteLine(((Employee)line).FirstName);                         
      sw.WriteLine(((Employee)line).LastName);                         
      sw.WriteLine(((Employee)line).JobTitle);                     
    }                  
} 

また、あなたのコードで指摘すべきことは、不必要なアンボックスをたくさん行っていることです。 もしあなたが、普通の(一般的でない)コレクションである ArrayList のような単純な (一般的でない) コレクションを使用する必要がある場合は、オブジェクトを一度アンボックスして、参照を使用します。

しかし、私はどちらかというと List<> を使いたいと思います。

public class EmployeeList : List<Employee>