1

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

4

4 回答 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
  • 要确定文件是否“隐藏”,请检查其名称是否以.
  • 要确定文件是否为只读,请执行 astat(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需要使用而不是/ahdir命令中使用。

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 回答