这是一些简单的代码:
DIR* pd = opendir(xxxx);
struct dirent *cur;
while (cur = readdir(pd)) puts(cur->d_name);
Run Code Online (Sandbox Code Playgroud)
我得到的东西有点混乱:包括dot(.),dot-dot(..)和以~.结尾的文件名.
我想做与命令完全相同的事情ls.我该如何解决这个问题?
Zif*_*fre 16
这个是正常的.如果你这样做ls -a(显示所有文件,ls -A将显示除.和之外的所有文件..),你将看到相同的输出.
.是一个指向它所在目录的链接:foo/bar/.是同一个东西foo/bar.
..是一个链接,指向它所在目录的父目录:与之foo/bar/..相同foo.
开头的任何其他文件.都是隐藏文件(按照惯例,它并没有真正强制执行;这与Windows不同,后者存在真正的官方隐藏属性).以~文件编辑器创建的文件可能是由文本编辑器创建的备份文件(再次,这是惯例,这些可能是任何东西).
如果您不想显示这些类型的文件,则必须明确检查它们并忽略它们.
消除隐藏文件:
DIR* pd = opendir(xxxx);
struct dirent *cur;
while (cur = readdir(pd)) {
if (cur->d_name[0] != '.') {
puts(cur->d_name);
}
}
Run Code Online (Sandbox Code Playgroud)
消除以"〜"结尾的隐藏文件和文件:
DIR* pd = opendir(xxxx);
struct dirent *cur;
while (cur = readdir(pd)) {
if (cur->d_name[0] != '.' && cur->d_name[strlen(cur->d_name)-1] != '~') {
puts(cur->d_name);
}
}
Run Code Online (Sandbox Code Playgroud)