C# 下载文件并同时从中读取
我使用以下方法下载文件:C# 下载文件并同时从中读取,c#,.net,C#,.net,我使用以下方法下载文件: WebClient WC = new WebClient(); WC.DownloadFile(url, filePath); 我希望在读取文件的同时: var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None); 但我总觉得: The process cannot access the file 'filePath' because it is being us
WebClient WC = new WebClient();
WC.DownloadFile(url, filePath);
我希望在读取文件的同时:
var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None);
但我总觉得:
The process cannot access the file 'filePath' because it is being used by another process.
可以同时下载和阅读吗 编辑 我现在使用以下工具下载该文件:
var req = (HttpWebRequest)HttpWebRequest.Create(url);
var fileStream = new FileStream(filePath,
FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
using (var resp = req.GetResponse())
{
using (var stream = resp.GetResponseStream())
{
byte[] buffer = new byte[0x10000];
int len;
while ((len = stream.Read(buffer, 0, buffer.Length)) > 0)
{
fileStream.Write(buffer, 0, len);
}
}
}
但仍然会出现错误……请尝试以下方法:
var req = (HttpWebRequest)HttpWebRequest.Create(url);
using (var resp = req.GetResponse())
{
using (var stream = resp.GetResponseStream())
{
byte[] buffer = new byte[0x10000];
int len;
while ((len = stream.Read(buffer, 0, buffer.Length))>0)
{
//Do with the content whatever you want
// ***YOUR CODE***
fileStream.Write(buffer, 0, len);
}
}
}
HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://www.domain.com/file.txt");
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
var stream = response.GetResponseStream();
byte[] buffer = new byte[8192];
int bytesRead = 0;
while ((bytesRead = stream.Read(buffer, 0, 8192)) > 0)
{
// handle your raw data
// you needed raw data = buffer[0 to bytesRead - 1]
}
stream.Close();
response.Close();
试着这样做:
HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://www.domain.com/file.txt");
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
var stream = response.GetResponseStream();
byte[] buffer = new byte[8192];
int bytesRead = 0;
while ((bytesRead = stream.Read(buffer, 0, 8192)) > 0)
{
// handle your raw data
// you needed raw data = buffer[0 to bytesRead - 1]
}
stream.Close();
response.Close();
文件是否需要写入磁盘?您可以随时将其下载到内存中并读取流。要执行类似操作,您可能需要使用原始的
HttpWebRequest
/GetResponseStream
,并在每个数据块到达时进行处理(通过任何“读取”方法)。可以下载每个数据块并将其写入文件?@MTA您获得一个流;当您从流中读取时,您当然可以同时将每个块写入接收文件流。这正是WebClient
让您更轻松的基本功能-它只是包装了原始请求/响应模型,并添加了一些常见的使用场景。@MTA和您的编辑。。。你打开文件写了吗?您似乎打开了它进行读取(FileAccess
)文件是否需要写入磁盘?您可以随时将其下载到内存中并读取流。要执行类似操作,您可能需要使用原始的HttpWebRequest
/GetResponseStream
,并在每个数据块到达时进行处理(通过任何“读取”方法)。可以下载每个数据块并将其写入文件?@MTA您获得一个流;当您从流中读取时,您当然可以同时将每个块写入接收文件流。这正是WebClient
让您更轻松的基本功能-它只是包装了原始请求/响应模型,并添加了一些常见的使用场景。@MTA和您的编辑。。。你打开文件写了吗?看起来您打开它是为了读取(FileAccess
)我应该如何定义文件流?我是这样定义的:var filestream=newfilestream(filePath,FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite)代码>。并且仍然得到错误该进程无法访问文件路径,因为它正被另一个进程使用。
@MTA这意味着-正如错误所说-另一个应用程序使用此文件。关闭该应用程序或使用其他文件名,但另一个应用程序是我尝试下载文件的地方。我应该如何定义文件流?我这样定义它:var filestream=new filestream(filePath,FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite)代码>。并且仍然得到错误该进程无法访问文件路径,因为它正被另一个进程使用。
@MTA这意味着-正如错误所说-另一个应用程序使用此文件。关闭该应用程序或使用其他文件名,但另一个应用程序是我尝试下载文件的地方