我正在尝试检查MovieClip(this.root).gotoAndPlay(1, "Scene 1");
何时引发错误,因此我使用fread()
。
ferror()
但是,chunk = fread(buf, 1, 100, file);
if (ferror(file))
{
return errno;
}
手册页说:
错误这些函数不应该失败,也不要设置外部变量errno。
那么,虽然ferror()
和fread()
没有设置ferror()
,但我怎么知道文件读取时发生的错误类型?
答案 0 :(得分:3)
你无法从这里到达那里。
fread
未设置errno
(正如您所发现的那样),因此您无法真正确定特定的错误状态;只有是一个。错误的确切性质通常取决于实现。没有基于C标准库的可移植方式来收集它。
对于特定的系统级错误,你可以将它丢到系统调用,可能会遇到像一路上差的/不存在的IO缓冲这样的陷阱。 POSIX可以在某种程度上帮您解决问题。调用read
,等设置errno
,并有一套相当详细的可能结果。如果您正在使用的平台符合POSIX标准且代码对于了解其中非常重要,那么这可能是您的选择。
但是从C标准库中,除了被告知错误发生之外,你不会发现太多东西。一般来说,你发现自己并不需要更多。
答案 1 :(得分:1)
这些功能不使用errno
,所以你不应该使用fread()
。
值得注意的是,您可以从fread()
的返回值判断一切是否顺利。如果nmemb
的返回值与传递的chunk = fread(buf, 1, 100, file);
if (chunk != 100) { // If fread() returns a number different to the nmemb parameter, either error or EOF occured
if (ferror(file))
{
printf("Error occured while reading file.");
return -1; // Or what ever return value you use to indicate an error
}
}
参数(在您的情况下为100)不同,那么您要么到达文件的末尾,要么在读取它时发生错误(source)。所以只测试那种情况:
完全放弃使用errno:
{{1}}