C程序列出隐藏和只读文件

时间:2013-02-02 15:45:52

标签: c linux

我正在创建一个列出目录内容的简单C程序。有谁知道如何列出只隐藏?下面的代码从目录中提取每个文件并且工作正常,但我只需要隐藏文件。感谢。

4 个答案:

答案 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
}