我想重写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中打开,我认为此文件已通过测试是否存在异常。
添加回答
举报
0/150
提交
取消