我想重写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 文件是否可读/可写更容易,因为 fcntl/F_GETFL 似乎没有简单的 Windows 等效项。
解决方案似乎并不复杂,但由于我是 C 和 Python 的新手,我不想冒险制作一个有问题的异常处理程序。
谢谢你的帮助。