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

此外,要在您的代码中指出的一件事是您正在做很多不必要的拆箱。如果您必须使用一个普通的(非通用)集合,如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 回答
1

2021

只需使用File.AppendAllText,如果文件不存在,它会创建文件:

File.AppendAllText("myFile.txt", "some text");
于 2021-10-25T21:04:29.837 回答
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 回答
0
private List<Url> AddURLToFile(Urls urls, Url url)
{
    string filePath = @"D:\test\file.json";
    urls.UrlList.Add(url);

    //if (!System.IO.File.Exists(filePath))
    //    using (System.IO.File.Delete(filePath));

    System.IO.File.WriteAllText(filePath, JsonConvert.SerializeObject(urls.UrlList));

    //using (StreamWriter sw = (System.IO.File.Exists(filePath)) ? System.IO.File.AppendText(filePath) : System.IO.File.CreateText(filePath))
    //{
    //    sw.WriteLine(JsonConvert.SerializeObject(urls.UrlList));
    //}
    return urls.UrlList;
}

private List<Url> ReadURLToFile()
{
    //  string filePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"App_Data\file.json");
    string filePath = @"D:\test\file.json";

    List<Url> result = new List<Url>(); ;
    if (!System.IO.File.Exists(filePath))
        using (System.IO.File.CreateText(filePath)) ;



    using (StreamReader file = new StreamReader(filePath))
    {
        result = JsonConvert.DeserializeObject<List<Url>>(file.ReadToEnd());
        file.Close();
    }
    if (result == null)
        result = new List<Url>();

    return result;

}
于 2020-01-31T12:53:14.183 回答
0

这对我也有效

string path = TextFile + ".txt";

if (!File.Exists(HttpContext.Current.Server.MapPath(path)))
{
    File.Create(HttpContext.Current.Server.MapPath(path)).Close();
}
using (StreamWriter w = File.AppendText(HttpContext.Current.Server.MapPath(path)))
{
    w.WriteLine("{0}", "Hello World");
    w.Flush();
    w.Close();
}
于 2020-02-13T09:00:31.007 回答
0

这将启用使用 StreamWriter 附加到文件

 using (StreamWriter stream = new StreamWriter("YourFilePath", true)) {...}

这是默认模式,不会附加到文件并创建新文件。

using (StreamWriter stream = new StreamWriter("YourFilePath", false)){...}
                           or
using (StreamWriter stream = new StreamWriter("YourFilePath")){...}

无论如何,如果您想检查文件是否存在然后做其他事情,您可以使用

using (StreamWriter sw = (File.Exists(path)) ? File.AppendText(path) : File.CreateText(path))
            {...}
于 2020-10-07T10:50:50.593 回答