我正在尝试从网络下载文件并将其保存在本地,但出现异常:
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);
}
我见过许多其他问题,但都有同样的例外,但它们似乎都不适用于此。有什么帮助吗?
Update:
感谢您的回答!删除File.Create(...)
修复!
对文档的一条评论OpenWrite
: 这有点误导,简短的描述是:
打开一个existing用于写入的文件。
详细的描述说:
如果文件存在,它被打开为
写在开头。现有的
文件没有被截断。
更新2.0:
看起来 IntelliSense/F1 和在线文档之间存在差异。我认为它应该是相同的,因为我允许 F1 在显示文档时连接到网络。
File.Create
返回一个FileStream
- 你没有关闭它。这意味着你将无法打开another流写入同一文件,直到终结器关闭现有流。
只需摆脱呼叫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
在这里,您应该执行此操作以确保将连接释放到连接池中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)