使用c#在.txt文件上创建和写入

时间:2017-04-29 23:13:02

标签: c#

我正在尝试使用c#创建一个.txt文件并在其上写入,尽管我的代码运行时没有任何错误,文件在运行后不存在

string path = @"C:\Users\stra\Documents\Visual Studio 2017\Projects\ConsoleApp2\file.txt";

        try
        {
            if (File.Exists(path))
            {
                //writes to file
                System.IO.File.WriteAllText(path,"Text to add to the file\n");
            }
            else
            {
                // Create the file.
                using (FileStream fs = File.Create(path))
                {
                    System.IO.File.WriteAllText(path, "Text to add to the file\n");
                }

            }
            // Open the stream and read it back.
            using (StreamReader sr = File.OpenText(path))
            {
                string s = "";
                while ((s = sr.ReadLine()) != null)
                {
                    Console.WriteLine(s);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

1 个答案:

答案 0 :(得分:1)

我在上面的代码中看到的问题是,当您创建文件时,您有一个打开的文件流,阻止任何其他进程访问该文件。当您尝试调用System.IO.File.WriteAllText时,代码会在文件被锁定时抛出IOException。这是根据documentation for File.Create

预期的
  

此方法创建的FileStream对象的默认FileShare值为None;在原始文件句柄关闭之前,没有其他进程或代码可以访问创建的文件。

要解决此问题,我会更改以下代码:

// Create the file.
using (FileStream fs = File.Create(path))
{
   System.IO.File.WriteAllText(path, "Text to add to the file\n");
}

要么不使用文件流,请使用File类:

// Create the file.
System.IO.File.WriteAllText(path, "Text to add to the file\n");

或者如果您想使用文件流,请使用FileStream Write方法写入:https://msdn.microsoft.com/en-us/library/system.io.filestream.write(v=vs.110).aspx

   // Create the file.
   using (FileStream fs = File.Create(path))
   {
      char[] value = "Text to add to the file\n".ToCharArray();
      fs.Write(Encoding.UTF8.GetBytes(value), 0, value.Length);
   }

通过以下任何一种修改,上述代码适用于我。