我正在创建一个列出目录内容的简单C程序。有谁知道如何列出只隐藏?下面的代码从目录中提取每个文件并且工作正常,但我只需要隐藏文件。感谢。
答案 0 :(得分: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 & /* ... */;
}
答案 1 :(得分:3)
.
stat(2)
并检查权限(st_mode
)或者,对于第二点,如果您小心,可以使用access(2)
。如果您想要open(2)
该文件,则不应该信任返回的access(2)
。通常应避免使用access(2)
。
答案 2 :(得分:1)
要检查文件是否只读,可以使用sys / stat.h(参考:http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/stat.h.html)
您需要做的就是执行&amp; 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
答案 3 :(得分:-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
}