2013-03-13 70 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

相關問題