我正在創建一個列出目錄內容的簡單C程序。有誰知道如何只列出隱藏?下面的代碼從目錄中提取每個文件並且工作完美,但我只需要隱藏的文件。謝謝。用於列出隱藏和只讀文件的C程序
回答
在GNU/Linux上,隱藏文件以點開頭。
#include <string.h>
int is_hidden(const char *name)
{
return name[0] == '.' &&
strcmp(name, ".") != 0 &&
strcmp(name, "..") != 0);
}
要檢查文件是隻讀的,也可能是使用stat
功能是個好主意。
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int is_readonly(const char *name)
{
struct stat buf;
stat(name, &buf);
return buf->st_mode & /* ... */;
}
哇,你太棒了!謝謝! –
正如上面的評論所解釋的,「隱藏文件」實際上是一個shell/ls約定。 – vonbrand
- 決定一個文件是「隱藏」的檢查,如果它的名字用
.
- 開始決定,如果一個文件是隻讀的,做一個
stat(2)
和檢查權限(st_mode
)
或者,對於第二點,如果您小心,可以使用access(2)
。如果你想open(2)
那個文件,你不應該相信access(2)
返回。一般要避免access(2)
。
避免訪問的原因是TOCTOU(檢查時間/使用時間)類型的問題:您檢查某件事物,有人偷偷進入並更改它,然後您依賴收集的(現在已過時的)數據。如果你只是檢查,這不是一個問題。 – vonbrand
下面的代碼片段將幫助您檢查文件是否在Windows中隱藏。
int is_hiddenfile(char* file_name)
{
FILE * batch_file = NULL;
FILE * output_file = NULL;
int count = 0;
batch_file = fopen ("D:\\bat.bat", "w");
fputs ("dir /ah ", batch_file);
fputs (file_name, batch_file);
fputs (" 2>D:\\out.txt", batch_file);
fclose (batch_file);
ShellExecuteA (NULL, "open", "D:\\bat.bat", NULL, NULL, SW_SHOWNORMAL);
output_file = fopen("D:\\out.txt", "r");
while(feof(output_file) == 0)
{
fgetc(output_file);
count++;
}
if (count <= 1)
return 1;
else
return 0;
}
要檢查文件是否在窗口只讀與否,/ar
需要dir
命令用來代替/ah
。
int is_readonlyfile(char* file_name)
{
... //same as is_hiddenfile function
fputs ("dir /ar ", batch_file);
... //same as is_hiddenfile function
}
這個問題被標記爲* Linux *,您的答案不適用於Linux。 –
不僅如此,而且建議在D盤的根目錄創建一個名爲'bat.bat'的新文件(用戶是否有這樣的驅動器和寫入權限?誰知道?)調用shell' dir「命令詢問隱藏文件並尋找正在尋找的文件,將輸出傳送到名爲」out.txt「的文件,然後檢查它是否包含內容。然後它將批處理文件和管道輸出文件都保留在原位。所以這是一個非常複雜的查詢方式,甚至不一定會奏效。 – Tommy
要檢查文件是否爲只讀或沒有,你可以用sys/stat.h(參考:http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/stat.h.html)
所有你需要做的是執行上ST_MODE &(二進制和)操作。
struct stat st;
if (stat(fileName, &st) == 0)
cout << " user write permission: " << (st.st_mode & 00200) ;
如果輸出爲0,則用戶無權寫入(只讀)。否則,該文件不是隻讀的。
其他權限位:
S_IRWXU 00700 mask for file owner permissions
S_IRUSR 00400 owner has read permission
S_IWUSR 00200 owner has write permission
S_IXUSR 00100 owner has execute permission
S_IRWXG 00070 mask for group permissions
S_IRGRP 00040 group has read permission
S_IWGRP 00020 group has write permission
S_IXGRP 00010 group has execute permission
S_IRWXO 00007 mask for permissions for others
(not in group)
S_IROTH 00004 others have read permission
S_IWOTH 00002 others have write permission
S_IXOTH 00001 others have execute permission
謝謝,這個信息很有幫助。 – reformed
- 1. 創建文本文件,並使其隱藏和只讀c#
- 2. c#導出CSV文件隱藏列
- 3. 寫入隱藏/只讀文件的推薦方式C#
- 4. 隱藏/取消隱藏列在Excel在VSTO應用程序C#
- 5. 隱藏文本只用於屏幕閱讀器
- 6. 如何使用rootkit列出隱藏的文件/進程/ regKeys
- 7. 隱藏的程序在C程序
- 8. 閱讀隱藏文件
- 9. Objective-C的隱藏文件
- 10. C#列出沒有隱藏文件的文件(Plus列表選項)
- 11. 由於隱藏/控制字符,C++中的文本文件的讀行失敗
- 12. 刪除鏈接和取消隱藏隱藏文件c#
- 13. 如何在jtree中只列出非隱藏和非系統文件
- 14. 應用程序文件系統中的隱藏文件夾
- 15. 如何隱藏使用C \ C++並顯示啓用的隱藏文件和文件夾
- 16. C#隱藏進程(進程不隱藏)
- 17. 隱藏文件夾C#
- 18. 查找由於溢出而被隱藏的文本:隱藏?
- 19. C++程序讀取文件
- 20. SVN:只讀/檢出只讀文件
- 21. 閱讀隱藏的zip文件
- 22. 如何隱藏應用程序中的jsp文件夾路徑和文件名
- 23. C# - 獲取不包含隱藏文件的文件列表
- 24. 公開隱藏JSON文件;只能訪問我的Android應用程序
- 25. 關於C程序中的.c文件和.h文件?
- 26. 確定什麼文字被隱藏由於溢出:隱藏
- 27. 只複製某些文件和文件夾的程序C#
- 28. 用c語言打開隱藏文件
- 29. 簡單的C++文件讀取程序只返回垃圾
- 30. 找出列是否隱藏在使用EPPLUS的Excel文件中
短語 「隱藏文件」 幾乎是毫無意義的。它基本上意味着「那些名稱不在默認情況下使用任何工具打印名稱的文件」。一個常見的慣例是禁止以'。'開頭的名字,但是如果您正在編寫打印名稱的軟件,那麼您可以決定什麼是「隱藏文件」。 –