我正在制作一个在Linux shell中运行的程序,该程序接受一个参数(目录),并显示目录中的所有文件及其类型。
输出应如下所示:
<< ./Program testDirectory
Dir directory1
lnk linkprogram.c
reg file.txt
如果没有参数,它将使用当前目录。这是我的代码:
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
struct stat info;
DIR *dirp;
struct dirent* dent;
//If no args
if (argc == 1)
{
argv[1] = ".";
dirp = opendir(argv[1]); // specify directory here: "." is the "current directory"
do
{
dent = readdir(dirp);
if (dent)
{
printf("%c ", dent->d_type);
printf("%s \n", dent->d_name);
/* if (!stat(dent->d_name, &info))
{
//printf("%u bytes\n", (unsigned int)info.st_size);
}*/
}
} while (dent);
closedir(dirp);
}
//If specified directory
if (argc > 1)
{
dirp = opendir(argv[1]); // specify directory here: "." is the "current directory"
do
{
dent = readdir(dirp);
if (dent)
{
printf("%c ", dent->d_type);
printf("%s \n", dent->d_name);
/* if (!stat(dent->d_name, &info))
{
printf("%u bytes\n", (unsigned int)info.st_size);
}*/
}
} while (dent);
closedir(dirp);
}
return 0;
}
由于某种原因dent->d_type
未显示文件类型。我不太确定该怎么办,有什么建议吗?
d_type
是一项速度优化lstat(2)
,可在支持时节省通话费用。
正如readdir
(3)手册页所指出的那样,并非所有文件系统都在该d_type
字段中返回真实信息(通常是因为读取索引节点需要花费大量的磁盘查找工作,如果不使用XFS,情况就是这样mkfs.xfs -n ftype=1
(-m crc=1
即(尚未设置为默认值)。始终设置的文件系统DT_UNKNOWN
在现实生活中很常见,并不是您可以忽略的东西。XFS并不是唯一的例子。
如果仅使用文件名不足以决定它没意思,您将始终需要使用if
lstat
(2)的代码d_type==DT_UNKNOWN
。(对于某些调用程序(例如find -name
或扩展glob这样的调用程序),就是这种情况*.c
,这就是为什么readdir
如果需要额外的磁盘读取,也不会产生填充它的开销。)
Linux
getdents(2)
手册页上有一个示例程序,可以完成您要执行的操作,其中包括一个链接的三元运算符块,用于将d_type
字段解码为文本字符串。(至于其他的答案指出,你的错误是打印出来作为一个字符,而不是它比较对DT_REG
,DT_DIR
等等)
无论如何,其他答案大多涵盖了所有内容,但是却错过了关键的细节,在这种情况下(Linux上的0 存储在以前的填充字节中,直到Linux 2.6.4),您
需要进行备用 。d_type == DT_UNKNOWN``d_type
为了便于移植,您的代码需要检查是否有struct dirent
一个d_type
字段(如果使用了它),否则您的代码 甚至不会在GNU和BSD系统之外进行 编译 。(请参阅readdir(3)
)
我是一个快速的初学者,我正在尝试编写一个函数来读取*. csv文件的内容并返回一个二维数组[[Double]]。 我使用的是在macOS 10.14上运行的Xcode 10.1。 我正在使用以下代码(在游乐场中)将文件的内容读入字符串: 我得到以下错误: Error Domain=NSCocoaErrorDomain Code=260"无法打开文件"x.csv",因为没有这样的文件。"UserIn
本文向大家介绍Node.js 检查文件或目录是否存在,包括了Node.js 检查文件或目录是否存在的使用技巧和注意事项,需要的朋友参考一下 示例 异步地 同步地 在这里,我们必须将函数调用包装在一个try/catch块中以处理错误。
运行播放后,当我卷曲服务器时,我看不到index.html文件中的内容。有人能帮我玩游戏吗? 名称:安装webserver并链接到文件夹主机:prod任务: 名称:创建目录文件:路径:/web_hosting状态:目录设置类型:httpd_sys_content_t模式:0775 名称:install yum:name:httpd state:present 名称:配置服务服务:名称:httpd状
问题内容: 我想检查我的Go代码中文件的存在,但是我找不到一种好的方法。 我知道有一种Java中的File方法:如果文件或目录存在,则返回true。 但是如何在Go中完成呢? 问题答案: 编辑以添加错误处理。
问题内容: 我在Windows中使用Code :: Blocks。 我创建了一个dll项目,试图获得一些JNI实践。 在javah生成的.h文件中,有#include jni.h,但是当我尝试对其进行编译时,它总是说jni.h:没有这样的文件或目录。 我认为这与classpath有关,但我不知道它是什么!可能是我必须更改Code :: Blocks的设置 有人可以帮我解决这个问题吗?非常感谢 编辑
问题内容: 我从节点应用程序收到此错误: 我知道文件在那里,因为当我尝试使用确切的复制和粘贴路径打开文件时,它可以工作。我也知道应用程序使用的是正确的目录,因为它会在错误中输出它。 问题答案: 波浪形扩展是一件空壳的事情。编写正确的路径名(可能是yourusername )或使用