Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 下载文件并同时从中读取_C#_.net - Fatal编程技术网

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这意味着-正如错误所说-另一个应用程序使用此文件。关闭该应用程序或使用其他文件名,但另一个应用程序是我尝试下载文件的地方