5

我收到此错误:该进程无法访问该文件(...),因为它正被另一个进程使用。我试过用 File.WriteAllText

StreamWriter sw = new StreamWriter(myfilepath);
                sw.Write(mystring);
                sw.Close();
                sw.Dispose();

;

using (FileStream fstr = File.Create(myfilepath))
                {
                StreamWriter sw = new StreamWriter(myfilepath);
                sw.Write(mystring);
                sw.Close();
                sw.Dispose();
                fstr.Close();
                }

我要做的就是访问一个文件,在上面写,然后关闭它。我可能会犯一个愚蠢的错误,但我想了解我做错了什么以及为什么。如何确保文件已关闭并且不会再次导致此错误。

到目前为止,在答案的帮助下,我做到了:

using (FileStream fstr = File.Open(myfilepath,FileMode.OpenOrCreate,FileAccess.ReadWrite))
                {
                    StreamWriter sw = new StreamWriter(fstr);
                    sw.Write(mystring);
                    sw.Close();


                }

这似乎更好,因为如果我在第二次访问该页面时尝试访问另一个文件,它似乎会关闭/停止我的文件进程。但是,如果我再次尝试访问同一个文件,它会再次给我错误。

4

4 回答 4

4

为什么不直接使用:

System.IO.File.WriteAllText(myfilepath, mystring");

那不应该锁定您的文件。

在内部 WriteAllText 使用FileShare.Read并在完成写入后立即释放该锁定。

于 2012-07-27T11:51:37.567 回答
2

“因为它正在被另一个进程使用”这就是线索。您是否偶然在记事本或其他东西中打开了文件?

您可能需要在打开文件时设置共享模式以允许阅读者,并且只请求您需要的权限(写入权限)。

于 2012-07-27T11:46:51.593 回答
1

我要感谢大家的帮助。事实上,除了这段代码之外,我发现在上面的代码之后我还有一个 stremReader 仍然在其他地方打开。最后,我为此更改了之前的代码:

using (FileStream fstr = File.Open(myfile, FileMode.OpenOrCreate, FileAccess.ReadWrite))

                    {
                        StreamWriter sw = new StreamWriter(fstr);
                        sw.Write(mystring);
                        sw.Flush();
                        sw.Dispose();
                    }

在我的 StreamReader 上,我这样做了:

StreamReader sr = new StreamReader(myfile);
string sometext = sr.ReadToEnd();
sr.Dispose();

我也可以使用这个:

File.ReadAllText(myfile);

如果有什么我可以用更好的方式做的,请告诉我。非常感谢你。

于 2012-07-31T09:11:31.797 回答
0

试试这个

FileStream fs = new FileStream(myfilepath, FileMode.Create, FileAccess.Write);            
byte[] bt = System.Text.Encoding.ASCII.GetBytes(mystring);
fs.Write(bt, 0, bt.Length);
fs.Close();
于 2012-07-27T11:50:26.210 回答