給出一個路徑,比如/ home/shree/path/def,我想確定def是一個目錄還是一個文件。有沒有在C或C++代碼中實現這一點的方法?在C和C++中區分unix目錄和文件
20
A
回答
35
以下代碼使用stat()
函數和S_ISDIR
('是目錄')和S_ISREG
('是常規文件')宏來獲取有關文件的信息。其餘的只是錯誤檢查,並且足以製作完整的可編譯程序。
#include <stdio.h>
#include <errno.h>
#include <sys/stat.h>
int main (int argc, char *argv[]) {
int status;
struct stat st_buf;
// Ensure argument passed.
if (argc != 2) {
printf ("Usage: progName <fileSpec>\n");
printf (" where <fileSpec> is the file to check.\n");
return 1;
}
// Get the status of the file system object.
status = stat (argv[1], &st_buf);
if (status != 0) {
printf ("Error, errno = %d\n", errno);
return 1;
}
// Tell us what it is then exit.
if (S_ISREG (st_buf.st_mode)) {
printf ("%s is a regular file.\n", argv[1]);
}
if (S_ISDIR (st_buf.st_mode)) {
printf ("%s is a directory.\n", argv[1]);
}
return 0;
}
樣品試驗如下所示:
pax> vi progName.c ; gcc -o progName progName.c ; ./progName
Usage: progName
where is the file to check.
pax> ./progName /home
/home is a directory.
pax> ./progName .profile
.profile is a regular file.
pax> ./progName /no_such_file
Error, errno = 2
9
使用stat(2)系統調用。您可以在st_mode字段上使用S_ISREG或S_ISDIR宏來查看給定路徑是文件還是目錄。手冊頁告訴你所有其他領域。
-1
另外,您可以在內置的shell命令 「測試」 使用system()函數。
系統返回命令的退出狀態最後執行
string test1 = "test -e filename" ; if(!system(test1)) printf("filename exists") ; string test2 = "test -d filename" ; if(!system(test2)) printf("filename is a directory") ; string test3 = "test -f filename" ; if(!system(test3)) printf("filename is a normal file") ;
但恐怕這隻會在Linux上工作..
5
怎麼樣使用升壓::文件系統庫及其is_directory(const的路徑& p)?熟悉這可能需要一段時間,但不是那麼多。這可能是值得的投資,並且你的代碼將不是平臺特定的。
相關問題
- 1. 在Unix C++文件夾的根目錄中列出文件和目錄
- 2. 區分文件和目錄
- 3. 在PHP中區分文件和目錄
- 4. 在Unix中區分管道和文件
- 5. 文件和目錄C#
- 6. 使用java區分文件和目錄
- 7. C++與DevC++,如何在unix中訪問文件?在閱讀和在Windows目錄下寫入文件與C++
- 8. unix在目錄和子目錄中查找和替換文本
- 9. Visual Studio沒有區分C頭文件和C++頭文件
- 10. C#cosmos文件IO和目錄
- 11. 好的C++目錄和文件庫?
- 12. C++搜索目錄和文件
- 13. C#解鎖目錄和複製文件
- 14. C++遍歷文件和目錄
- 15. 組合目錄和文件路徑 - C
- 16. C函數在UNIX中複製目錄:文件無法複製
- 17. 列出目錄中的所有文件和子目錄C#
- 18. 如何區分fat16中的目錄和文件條目?
- 19. 在php中區分一個目錄和一個文件
- 20. 如何在NERDTree中區分git忽略的文件和目錄
- 21. 區分C#中的Click和DoubleClick事件
- 22. 區分C++中的文件夾和文件
- 23. 區分NSFileWrapper和目錄?
- 24. 移動文件和目錄的子文件夾在UNIX
- 25. 區分文件從目錄
- 26. C/C++ Makefile:如何在.c文件和其他目錄中的目標文件之間建立依賴關係?
- 27. 計數的文件與目錄和子目錄C++
- 28. 如何在UNIX中刪除多個文件和目錄
- 29. 區分集合中的文件和目錄
- 30. 如何區分Perl中的文件和目錄?
由於錯誤檢查,您的代碼有點麻煩。我建議刪除這個並添加一些評論,如「檢查錯誤:文件不存在,沒有足夠的參數」。我認爲它會讓你的答案更好一些 – 2009-06-24 07:40:59
我更喜歡錯誤檢查,因爲這經常被排除在示例之外,人們不一定知道如何將它放回去。 – 2009-06-24 08:07:40