Kir*_*ril 7 c# file-io exception file
我正在尝试从网上下载文件并将其保存在本地,但我得到一个例外:
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);
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了许多其他相同例外的问题,但它们似乎都不适用于此.有帮助吗?
更新:
谢谢你的回答!卸下File.Create(...)固定它!
关于文档的一个评论OpenWrite:它有点误导,简要说明:
打开现有文件进行写入.
详细说明如下:
如果文件存在,则打开它以便在开头写入.现有文件未被截断.
更新2.0:
看起来像IntelliSense/F1和在线文档之间的差异.我认为它应该是相同的,因为我允许F1在显示文档时连接到网络.
Jon*_*eet 17
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);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我也在处理WebResponse这里,您应该这样做以确保连接释放到连接池.
看起来像File.Create返回一个打开的FileStream对象
http://msdn.microsoft.com/en-us/library/aa328775(v=VS.71).aspx
尝试
using (FileStream fs = File.Create("data.csv"))
Run Code Online (Sandbox Code Playgroud)
并取消第一个File.Create