我正在创建一个列出目录内容的简单 C 程序。有谁知道如何只列出隐藏?以下代码从目录中提取每个文件并完美运行,但我只需要隐藏文件。谢谢。
问问题
3947 次
4 回答
6
在 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 & /* ... */;
}
于 2013-02-02T15:52:06.690 回答
3
- 要确定文件是否“隐藏”,请检查其名称是否以
.
- 要确定文件是否为只读,请执行 a
stat(2)
并检查权限 (st_mode
)
access(2)
或者,如果你小心的话,你可以使用第二点。如果你想要open(2)
那个文件,你不应该相信access(2)
返回的任何东西。一般access(2)
是要避免的。
于 2013-02-02T15:47:03.937 回答
1
要检查文件是否为只读,可以使用 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
于 2014-07-02T11:15:49.703 回答
-2
下面的代码片段将帮助您检查文件是否在 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;
}
要在 windows 中检查文件是否为只读文件,/ar
需要使用而不是/ah
在dir
命令中使用。
int is_readonlyfile(char* file_name)
{
... //same as is_hiddenfile function
fputs ("dir /ar ", batch_file);
... //same as is_hiddenfile function
}
于 2013-02-02T18:24:38.373 回答