2013-03-13 97 views
0

如何检查文件(输入)是否在C程序的目录中? 首先我想我可以打开文件,但我不希望用户通过输入类似../important_dir/important_file来看到我的其他文件,但如果用户执行诸如./dir1/../file1之类的操作,也许可以。也就是说,只要该文件位于当前目录(无子目录),就可以打开该目录。如何检查一个文件是否在C中的当前目录?

然后,我四处搜索,发现readdir,它可以用来查找当前目录中的所有内容,但是,如果当前目录中有很多文件,那么每次获取用户时查找文件名都会太慢输入。

有没有快速和安全的方法来做到这一点?

回答

0

您可以使用stat()来检查文件的状态。如果有问题的文件不存在,它将返回-1,并将errno设置为ENOENT

char filename[] = "myfile"; 

struct stat s = {0}; 

if (!(stat(filename, &s) 
{ 
    if (ENOENT == errno) 
    perror("file does not exist."); 
} 
+0

嗨,我试图不允许用户检查我的文件不在当前目录中,似乎stat会接受一个路径,只要它是有效的,所以它会给用户文件,如'../dir3/file4',这不是我所期望的。 – user1537085 2013-03-13 09:01:56

1

我认为realpath应该做这项工作。 如果可能,我会在明天发布解决方案。

+0

是的,比较'realpath()'解决文件名问题和'getcwd()'返回结果。 – alk 2013-03-13 10:17:42

相关问题