我正在用C编程并试图编写可移植的代码。
我的问题是,如何判断文件是否存在并且可读?
我当前正在使用代码:
f = fopen(filename, "r");
if (f) printf("File exists!");
在我的程序中,filename
由用户设置,应被视为不受信任的输入(例如,filename
可能是恶意制作的)。
我的问题是上面的代码不够鲁棒。例如,当在文件名为“ PRN”的窗口上使用时,它将打印“文件存在!”。即使文件系统上不存在此类文件。
我知道我可以在Windows上过滤掉保留的文件名,因为只有十几个文件名,但这听起来像是黑客。另外,我只知道我所知道的。也许还有其他我不知道的“保留”或“特殊”名称。
是否有任何简单且可移植的方法来确定C中是否存在文件?
或者,如果我必须使用OS API,应该使用哪个功能?