首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileStream溢出异常

FileStream溢出异常
EN

Stack Overflow用户
提问于 2017-09-08 23:21:57
回答 2查看 329关注 0票数 2

当试图在while循环值中运行eof语句时获取溢出异常,对于字符来说,eof值要么太大要么太小。

代码语言:javascript
复制
string filePath = @"C:\Users\Klanix\Desktop\NewC#\testfile2.txt";

        FileStream fs = File.Open(filePath, FileMode.Open);

        char readChar;
        byte[] b = new byte[1024];

        while(fs.Read(b, 0, b.Length) > 0)
        {
            readChar = Convert.ToChar(fs.ReadByte());
            Console.WriteLine(readChar);
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-08 23:31:33

首先读取文件的1024字节(可能是文件的末尾),然后尝试读取下一个字节,在这种情况下,该字节将返回-1,并且不能转换为char。

你为什么要读第一个1024字节?试着每次读取1字节:

代码语言:javascript
复制
string filePath = @"C:\Users\Klanix\Desktop\NewC#\testfile2.txt";
FileStream fs = File.Open(filePath, FileMode.Open);
int val;
while((val = fs.ReadByte()) > 0)
{
     readChar = Convert.ToChar(val);
     Console.WriteLine(readChar);
}

你不需要byte[] b = new byte[1024];

票数 1
EN

Stack Overflow用户

发布于 2017-09-08 23:34:55

在调用fs.ReadByte()时,无需首先检查fs是否仍有一个字节。因为您正在调用while(fs.Read(b, 0, b.Length) > 0),所以很可能会将fs空到b中,然后调用fs.ReadByte()会导致您的错误。

试一试如下:

代码语言:javascript
复制
string filePath = @"C:\Users\Klanix\Desktop\NewC#\testfile2.txt";

FileStream fs = File.Open(filePath, FileMode.Open);

for (int i = 0; i < fs.Length; i++)
{
    char readChar = Convert.ToChar(fs.ReadByte());
    Console.WriteLine(readChar);
}

还可以尝试阅读ReadByte的文档。

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

https://stackoverflow.com/questions/46125683

复制
相关文章

相似问题

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