gpt4 book ai didi

C#: FileStream.Read() 不读取文件直到最后,但返回 0

转载 作者:太空狗 更新时间:2023-10-29 23:55:49 26 4
gpt4 key购买 nike

这是我的做法:

static void Main(string[] args)
{
string FileName = "c:\\error.txt";
long FilePosition = 137647;

FileStream fr = new FileStream(FileName, FileMode.Open);
byte[] b = new byte[1024];
string data = string.Empty;
fr.Seek(FilePosition, SeekOrigin.Begin);
UTF8Encoding encoding = new UTF8Encoding();

while (fr.Read(b, 0, b.Length) > 0)
{
data += encoding.GetString(b);
}
fr.Close();
string[] str = data.Split(new string[] { "\r\n" }, StringSplitOptions.None);
foreach (string s in str)
{
Console.WriteLine(s);
}
Console.ReadKey();
}

str 数组以这些行结尾:

***** History for hand T5-2847880-18 (TOURNAMENT: S-976-46079) *****
Start hand: Tue Aug 11 18:14

但文件中有更多行。

我已将 error.txt 上传到发送空间:http://www.sendspace.com/file/5vgjtn这是完整的控制台输出:the_same_site/file/k05x3a

求助!我在这里真的一无所知。提前致谢!

最佳答案

您的代码在以下方面存在一些细微的错误和问题:

  • 您假设整个缓冲区已通过调用 GetString(b)
  • 填充
  • 假设每个缓冲区都以一个字符结尾。使用TextReader(如StreamReader)读取文本数据,避免此类问题。
  • 如果发生异常,您不会关闭文件(使用 using 指令)
  • 您在循环中使用字符串连接:更喜欢 StringBuilder

正如其他人所指出的,File.ReadAllLines会避免很多这样的工作。还有 File.ReadAllText , 和 TextReader.ReadToEnd对于非文件。

最后,除非您确实需要调整一些选项,否则只需使用 Encoding.UTF8 而不是创建新实例。

关于C#: FileStream.Read() 不读取文件直到最后,但返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1261570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com