为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确处理C中的文件读取/写入错误?

如何正确处理C中的文件读取/写入错误?

梦里花落0921 2021-03-31 04:35:34
我想重写yEnc代码,使其在Win32和Visual Studio 2008上可编译。问题是yEnc使用unistd.h(UNIX)函数fcntl来检查文件是否可读或可写。当然,它与MS Visual Studio不兼容。这是我要删除的内容:static Bool writable(FILE *file){    int mode = fcntl(fileno(file),F_GETFL) & O_ACCMODE;    return (mode == O_WRONLY) || (mode == O_RDWR);}static Bool readable(FILE *file){    int mode = fcntl(fileno(file),F_GETFL) & O_ACCMODE;    return (mode == O_RDONLY) || (mode == O_RDWR);}这就是它的调用方式:FILE* infile = PyFile_AsFile(Py_infile);FILE* outfile = PyFile_AsFile(Py_outfile);if(!readable(infile) || !writable(outfile) ) {    return PyErr_Format(PyExc_ValueError, "file objects not writeable/readable");} /* File stuff including */    fread(&read_buffer, 1, in_ind, infile);if(ferror(infile) || ferror(outfile)) {    return PyErr_Format(PyExc_IOError, "I/O Error while encoding");}fputc(CR, outfile);fputc(LF, outfile);fflush(outfile);/* End of file stuff */有人可以帮我转换此可读/可写支票吗(等效于try {} catch {})?我认为处理文件读/写错误比尝试了解Windows文件是否可读写更容易,因为似乎没有Windows等效于fcntl / F_GETFL的简单方法。该解决方案似乎并不复杂,但是由于我是C和Python的新手,所以我不想冒制造错误的异常处理程序的风险。
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

最后,我认为进行以下检查就足够了:


infile == NULL

outfile == NULL 

fread != read_count

fwrite != write_count

ferror

这应该足够了。此外,该文件已首先在Python中打开,我认为此文件已通过测试是否存在异常。


查看完整回答
反对 回复 2021-04-05
  • 1 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信