将文本写入文件c#。由另一个进程使用

时间:2016-05-04 05:02:58

标签: c# asp.net

我正在创建一个文本文件,之后我尝试在该文件中写入一些文本。但是在编写文本时,它会产生异常,即进程无法访问文件,因为它正被另一个进程使用。请有人帮忙:(提前致谢。 这是我的代码

dt_Loc = loc1_ctab.GetEmpLocInfo(Session["empcd"].ToString());
string str = DateTime.Now.ToString("dd-mmm-yyyy");
str = dt_Loc.Rows[0]["loc1_abrv"].ToString() + "-" + str;

string path = FilesPath.Path_SaveFile + str + ".txt";
if (!File.Exists(path))
{
    File.Create(path);
    TextWriter tw = new StreamWriter(path);
    tw.WriteLine(txt_comments.Text);
    tw.Close();
}

2 个答案:

答案 0 :(得分:2)

删除File.Create,因为它会打开文件的FileStream。这会导致文件被打开,因此您会得到另一个进程正在使用该文件的异常。

if (!File.Exists(path))
{            
     using(StreamWriter sw = new StreamWriter(path))
     {
         sw.WriteLine(txt_comments.Text);
     }
}

答案 1 :(得分:1)

您的代码出现此类错误,因为Create方法创建或覆盖指定路径中的文件。它将返回A FileStream,它提供对path中指定的文件的读/写访问权限。因此,在执行writemethod时,返回的FS正在使用该文件。您可以通过以下方式使用它:

using (FileStream fs = File.Create(path))
{
   Byte[] info = new UTF8Encoding(true).GetBytes(txt_comments.Text);
   // Add some information to the file.
   fs.Write(info, 0, info.Length);
}

您可以使用File.WriteAllText来简化它,它将创建一个新文件,将内容写入文件,然后关闭文件。如果目标文件已存在,则会被覆盖。

string path =FilesPath.Path_SaveFile + str + ".txt";;
if (!File.Exists(path))
{
    File.WriteAllText(path, txt_comments.Text);
}