繁体   English   中英

C#文件异常:由于其他进程正在使用该文件,因此无法访问该文件

[英]C# File Exception: cannot access the file because it is being used by another process

我正在尝试从网上下载文件并将其保存在本地,但出现异常:

C#进程无法访问文件“ blah”,因为它正在被另一个进程使用。

这是我的代码:

File.Create("data.csv");  // create the file
request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
request.Timeout = 30000;
response = (HttpWebResponse)request.GetResponse();

using (Stream file = File.OpenWrite("data.csv"), // <-- Exception here
    input = response.GetResponseStream())
{
    // Save the file using Jon Skeet's CopyStream method
    CopyStream(input, file);
}

我已经看到许多其他问题,但有相同的例外,但是似乎没有一个适用于此。 有什么帮助吗?

更新:
感谢您的回答! 删除File.Create(...)修复了它!

关于OpenWrite文档的一则评论:简短描述说,这有点误导:

打开现有文件进行写入。

详细说明如下:

如果该文件存在 ,则将在开始时将其打开以进行写入。 现有文件不会被截断。

更新2.0:
看来IntelliSense / F1与联机文档之间存在差异。 我认为应该相同,因为在显示文档时允许F1连接到Web。

File.Create返回一个FileStream您没有关闭它。 这意味着在终结器关闭现有流之前,您将无法打开另一个写入同一文件的流。

刚刚摆脱调用的File.Create - File.OpenWrite无论如何都会创建它。 或者,保持FileStream左右写入:

using (Stream file = File.Create("data.csv"))
{
    request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
    request.Timeout = 30000;
    using (var response = (HttpWebResponse)request.GetResponse())
    using (Stream input = response.GetResponseStream())
    {
        // Save the file using Jon Skeet's CopyStream method
        CopyStream(input, file);
    }
}

请注意,我还在这里处理WebResponse ,您应该这样做以确保将连接释放到连接池中。

看起来像File.Create返回一个打开的FileStream对象

http://msdn.microsoft.com/zh-CN/library/aa328775(v=VS.71).aspx

尝试

using (FileStream fs = File.Create("data.csv"))

并保留第一个File.Create

问题在于File.Create方法实际上会打开文件并返回FileStream对象。 在对象被垃圾收集之前,它不会关闭文件(这将在不确定的时间内发生)。 不管您是否使用FileStream对象,仍然会创建它。 尝试这个:

using (Stream file = File.Create("data.csv"),
    input = response.GetResponseStream()) 
{ 
    // Save the file using Jon Skeet's CopyStream method 
    CopyStream(input, file); 
} 

第一。 File.Create将返回用于访问文件的流。

其次,如果那不能解决问题,那么如果您用谷歌who lock您,您将找到一个程序,让您确定同时正在访问文件的进程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM