我想重写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的新手,所以我不想冒制造错误的异常处理程序的风险。
一只甜甜圈
相关分类