首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在/Writing中读取( C# )文件

在/Writing中读取( C# )文件
EN

Stack Overflow用户
提问于 2010-11-21 04:26:25
回答 3查看 4.5K关注 0票数 2

我最近想跟踪HTTPWebRequest上传进度。因此,我从一个简单文本文件的缓冲读取开始,开始很小。然后我发现一个简单的任务

代码语言:javascript
复制
File.ReadAllText("text.txt");

变成了下面的样子,所有的溪流,读者,作家等等。或者什么东西可以被移除?另外,下面的代码不起作用。也许我做错了什么,如何在缓冲区中读取(我猜写也会类似),这样我就可以跟踪进度,假设流不是本地的。WebRequest

代码语言:javascript
复制
byte[] buffer = new byte[2560]; // 20KB Buffer, btw, how should I decide the buffer size?
int bytesRead = 0, read = 0;
FileStream inStream = new FileStream("./text.txt", FileMode.Open, FileAccess.Read);
MemoryStream outStream = new MemoryStream();
BinaryWriter outWriter = new BinaryWriter(outStream);

// I am getting "Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection."
// inStream.Length = Length = 9335092
// bytesRead = 2560
// buffer.Length = 2560
while ((read = inStream.Read(buffer, bytesRead, buffer.Length)) > 0)
{
    outWriter.Write(buffer);
    //outStream.Write(buffer, bytesRead, buffer.Length);
    bytesRead += read;
    Debug.WriteLine("Progress: " + bytesRead / inStream.Length * 100 + "%");
}
outWriter.Flush();

txtLog.Text = outStream.ToString(); 

更新:解决方案

代码语言:javascript
复制
byte[] buffer = new byte[2560];
int bytesRead = 0, read = 0;
FileStream inStream = File.OpenRead("text.txt");
MemoryStream outStream = new MemoryStream();

while ((read = inStream.Read(buffer, 0, buffer.Length)) > 0)
{
    outStream.Write(buffer, 0, buffer.Length);
    bytesRead += read;
    Debug.WriteLine((double)bytesRead / inStream.Length * 100);
}

inStream.Close();
outStream.Close();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-21 04:41:26

很可能是

代码语言:javascript
复制
outWriter.Write(buffer,0,read);
票数 0
EN

Stack Overflow用户

发布于 2010-11-21 07:15:32

由于您似乎在阅读文本(尽管我可能错了),如果您逐个字符地阅读而不是调用标准的read (),那么您的程序可能会简单得多:

代码语言:javascript
复制
BinaryReader reader = new BinaryReader(File.Open("./text.txt", FileMode.Open));
MemoryStream outStream = new MemoryStream();
StreamWriter outWriter = new StreamWriter(outStream);

while (Reader.BaseStream.Position < Reader.BaseStream.Length)
{
    outWriter.Write(reader.ReadChar());
    Debug.WriteLine("Progress: " + ((double)reader.BaseStream.Position) / (double)(reader.BaseStream.Length) + "%");
}
outWriter.Close();
txtLog.Text = outStream.ToString();
票数 0
EN

Stack Overflow用户

发布于 2010-11-21 08:32:17

因为您只需要检查上传操作的进度,所以可以使用fileinfo对象检查文件的大小。

在FileInfo类中,有一个名为length的属性,它返回文件大小(以字节为单位)。不确定写入文件时是否给出了当前大小。但我认为值得一试,因为它比你所用的方法更简单、更有效

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4236436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档