回答
最有效的方法是access
與F_OK
標誌。
stat
也適用,但它更重的重量,因爲它具有讀取inode的內容,而不僅僅是目錄。
訪問........ –
http://linux.die.net/man/2/access –
更正鏈接:http://pubs.opengroup.org/onlinepubs/9699919799/functions/access.html –
可以使用stat系統調用。請確保您檢查了errno
是否有正確的錯誤,因爲stat
因多種其他原因/失敗可能會返回-1
。
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
main()
{
struct stat BUF;
if(stat("/Filepath/FileName",&BUF)==0)
{
printf("File exists\n");
}
}
另一種方法是通過使用access功能。
#include <unistd.h>
main()
{
if(access("/Filepath/FileName", F_OK) != -1)
{
printf("File exists\n");
}
else
{
printf("File does not exist\n");
}
}
如果您想知道文件是否存在並且可以訪問(適當的權限,讀取和/或寫入權限等),有人建議只打開它並查看打開是否成功。當你需要關於文件的附加信息時,或者當你想知道它是否存在,即使你無法打開它時,「stat」也是有意義的......儘管仍然有可能沒有足夠的權限訪問stat文件,所以即使你可能需要在失敗時檢查「errno」。 – Dmitri
@Dmitri:OP正在尋找替代方法來檢查文件的存在,並明確說明狀態而不嘗試打開它。我們不知道OP要施加什麼樣的限制/條件。鑑於「stat」是一個可行的選擇,答案指出。 –
我並不打算對這個答案提出異議(我實際上贊成它)。我只是詳細闡述了一點,正是因爲我們不知道其他海報想要這樣做的原因。 – Dmitri
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
int rc;
struct stat mystat;
rc = stat(path, &mystat);
現在檢查RC和(可能)錯誤號。
編輯2011-09-18附錄:
兩個接入()和stat()返回0,如果路徑指向非文件(目錄,FIFO,符號鏈接,不管)
在stat()的情況下,可以用「((st_mode & S_IFREG)== S_IFREG)」來測試。 最好的方法仍然是嘗試用open()或fopen()打開文件。
- 1. C++:如何在該文件的路徑與給定的路徑
- 2. 在給定路徑找不到文件
- 3. 顯示文件,如果它存在於給定的路徑
- 4. 獲取給定路徑的文件ID
- 5. 列出給定路徑的文件夾的絕對路徑 - shell
- 6. 得到給定一個路徑和文件名路徑名
- 7. 給予在C#中的文件路徑
- 8. 在插件中給出文件路徑
- 9. 查找給定路徑的根路徑
- 10. 用給定路徑將文件保存到GridFS
- 11. 如何從給定文件夾路徑獲取文件夾路徑?
- 12. 如何確定給定路徑是文件還是文件夾?
- 13. 將文件保存到特定路徑
- 14. django自定義文件存儲路徑
- 15. 確定路徑保存文件
- 16. 從給定路徑
- 17. 解決不存在的文件的類路徑相對路徑
- 18. 保存.txt文件的文件路徑
- 19. 創建路徑不存在的文件?
- 20. 路徑變量:查找特定文件的文件夾路徑
- 21. JAVA |保存文件路徑
- 22. 保存HTML文件路徑
- 23. 存儲文件路徑
- 24. 寫入數據幀到在給定的路徑excel文件
- 25. 在給定的路徑/位置打印文件
- 26. 如何在路徑的給定部分下找到文件夾?
- 27. 查找給定的文件路徑在ios中是否有效?
- 28. 在Makefile中從文件的給定路徑獲取位置
- 29. 獲取給定的路徑
- 30. 在Linux中使用C++在給定路徑創建文件
值得一提的是,如果你打算如果該文件存在做一些事情,你應該嘗試做的事情。這可能是一種稱爲「在你飛躍之前」的反模式。 –