【问题标题】:How to know if a file/directory is hidden in programming in C [closed]如何知道文件/目录是否隐藏在C编程中[关闭]
【发布时间】:2013-10-07 19:59:06
【问题描述】:

我正在 C 中创建一个模拟“ls -li”行为的函数,所以我必须知道文件或目录是否因不显示而被隐藏。

谢谢

【问题讨论】:

  • 文件隐藏的原因是什么?一旦你知道了,编码应该很容易......(作为提示,有一天尝试ls -a,看看你是否能弄清楚。)
  • 不就是看名字是否以'.'开头的吗?
  • “隐藏”是什么意思?在 UNIX 和 Linux 中,通常没有“隐藏”标志,而是将名称以 . 开头的任何文件或目录视为“隐藏”。对于其他文件属性,man stat -s 2 有一些很好的信息。
  • 在什么操作系统上?基本上,您的操作系统将为此确定并提供 API。
  • 投票关闭,因为哪个 unix 以及显示文件的内容很重要.. 还因为您显然没有进行任何研究来自己找出答案,或者如果您这样做了,您没有'不要包括你还不清楚的地方。

标签: c unix


【解决方案1】:

通常,隐藏文件的名称开头有一个.。

检查文件名的第一个字符是否为.;如果是.,那么这是一个隐藏文件,您不会显示该文件。

char *filenames[10];

for (int i = 0; i < 10; i++)
    if (filenames[i][0] != '.')
        // Display filename

【讨论】:

  • 好吧,你是对的。我在比较 filename[0]==".";但 ”。”是一个字符串。非常感谢,我很感激
  • 您只需要比较字符。 filenames[i][0]!='.' 将文件名的第一个字符与字符 . 进行比较
【解决方案2】:

按照惯例,隐藏文件以点 (.) 开头。 ls -a 将显示它们。但正常的 ls 不会。 现代文件系统具有可以隐藏文件的扩展属性 (xttr)。 这是一个例子 http://man7.org/tlpi/code/online/dist/xattr/xattr_view.c.html

【讨论】:

    【解决方案3】:

    检查文件名的第一个字符是否为点。以. 开头的文件名在Unix 中按照惯例被认为是“隐藏的”,因为ls 与-a 或-A 不显示它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多