2011-04-13 41 views
0

我正在使用fopen的参数。我可以做些什么检查以确保fopen实际上将字符串转换为有效的文件名?如何检查给定的文件读取参数是否有效?

+4

不要;试着“打开”它。其他任何事情都会让你面对潜在的竞争条件。 – geekosaur 2011-04-13 03:30:40

+0

你想确保传递给'fopen'的值是'char *'吗?你在问什么?你有什么意思的有效文件名? – Mahesh 2011-04-13 03:30:40

+0

你问的如何验证文件名参数是一个实际的文件? – Gabe 2011-04-13 03:32:02

回答

7

第一种方法是尝试打开文件。如果fopen()返回NULL,则出现错误。检查errno变量或函数以找出问题。

试图预处理文件规范是徒劳无益的。操作系统会为你做每一项相关的检查,包括那些你很难做的检查,比如检查文件保护ACL等。

+1

这也意味着,即使您认为您只是通过预先检查来彻底检查,操作系统也会再次执行相同的检查,而且很可能还会进行一些您没有想到的检查。 – slezica 2011-04-13 04:00:12

+1

它也避免了竞争条件:你检查文件是否存在,并且它在那里,但这并不意味着当调用fopen时(或者反过来)它就会在那里。 – 2011-04-13 04:21:15