89

ファイルが存在しない場合は、コードを読み取って作成する必要があります。現在、作成および追加が存在するかどうかを読み取っています。コードは次のとおりです。

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();
}

}

4

9 に答える 9

139

あなたは単に呼び出すことができます

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);                     
    }                  
} 

また、コードで指摘すべきことの 1 つは、不必要なボックス化解除を大量に行っていることです。のような単純な (非ジェネリック) コレクションを使用する必要がある場合はArrayList、オブジェクトを一度ボックス化解除して参照を使用します。

ただし、List<>コレクションに使用することをお勧めします。

public class EmployeeList : List<Employee>
于 2012-04-30T11:42:47.330 に答える
18

また:

using FileStream fileStream = File.Open(path, FileMode.Append);
using StreamWriter file = new StreamWriter(fileStream);
// ...
于 2012-04-30T11:44:09.970 に答える
16

手動でチェックを行う必要さえありません。File.Open が自動的に行います。試す:

using (StreamWriter sw = new StreamWriter(File.Open(path, System.IO.FileMode.Append))) 
{

参照: http://msdn.microsoft.com/en-us/library/system.io.filemode.aspx

于 2012-04-30T11:41:45.727 に答える
5

はい、ファイルが存在しないFile.Exists(path)かどうかを確認する場合は、否定する必要があります。

于 2012-04-30T11:40:22.820 に答える
0

例えば

    string rootPath = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System));
        rootPath += "MTN";
        if (!(File.Exists(rootPath)))
        {
            File.CreateText(rootPath);
        }
于 2016-10-25T07:25:20.283 に答える