我正在尝试编写一个读取1个字节的代码(理想目标是n个字节,但从1个字节开始 - 所以对于n个字节,如果它更容易请建议)
下面是我试图一次读取1个字节并以十六进制格式输出的代码。但所有得到的都是一堆FFFF
FILE *fp;
int stringlength,i;
/* File can be txt or .bin */
fp = fopen("TestFile3.txt", "r");
if (fp == NULL)
{
puts("Error: Input file cannot be read");
return -1;
}
else
{
size_t i, strlength, lengthOfFile,c;
fseek(fp, 0, SEEK_END);
lengthOfFile = ftell(fp);
printf("length of File is ---- %d \n", lengthOfFile);
while (lengthOfFile)
{
c = fgetc(fp);
printf("%c", c);
lengthOfFile--;
}
putchar('\n');
}
fclose(fp);
return 0;
}
答案 0 :(得分:3)
您需要fseek(fp, 0, SEEK_SET);
在while
循环之前重置文件指针。
答案 1 :(得分:1)
您还要在" text"中打开文件。模式:
If 'cancel' or 'x' then
.......
End If
文本流是由字符组成的有序字符序列 行,每行由零个或多个字符加上a组成 终止换行符。最后一行是否需要 终止换行符是实现定义的。人物 可能必须在输入和输出上添加,更改或删除 符合在主机中表示文本的不同约定 环境。 因此,不需要一对一的对应关系 流中的字符与外部字符之间 表示。强>
使用fp = fopen("TestFile3.txt", "r");
不会返回文本流中可读的字节数。
如果要读取每个文件大小的每个字节,则需要以二进制模式打开文件:
fseek()/ftell()
最后,使用fp = fopen("TestFile3.txt", "rb");
对二进制文件也不可靠,因为,再次按照C标准,7.19.9.2:
二进制流不需要有意义地支持fseek调用 SEEK_END的价值
鉴于此,您无法可靠地使用fseek()/ftell()
来查找二进制文件的大小。是的,确实存在例子。
为了可靠地读取文件中的所有字节,@ Weather Vane在评论中发布了一种方法。