- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
使用这段代码,我可以递归地打印给定路径中的所有文件和子目录。
我想要的是忽略(不打印)所有子目录名,只打印文件名。
这是代码:
#include <stdio.h>
#include <dirent.h>
#include <string.h>
void listFilesRecursively(char *basePath)
{
char path[1000];
struct dirent *dp;
DIR *dir = opendir(basePath);
if (!dir)
return;
while ((dp = readdir(dir)) != NULL)
{
if (strcmp(dp->d_name, ".") != 0 && strcmp(dp->d_name, "..") != 0)
{
strcpy(path, basePath);
strcat(path, "/");
strcat(path, dp->d_name);
listFilesRecursively(path);
printf("%s\n", path);
}
}
closedir(dir);
}
int main()
{
char path[100];
printf("Enter path to list files: ");
scanf("%s", path);
listFilesRecursively(path);
return 0;
}
最佳答案
有些宏可以告诉您它是什么类型的文件:
S_ISREG()
:普通文件S_ISDIR()
:目录文件S_ISCHR()
: 字符特殊文件S_ISBLK()
: block 特殊文件S_ISFIFO()
:管道或FIFO-S_ISLNK()
: 符号S_ISSOCK()
:链接套接字首先,您可以使用以下功能之一获取信息:
#include <sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf );
int fstat(int fd, struct stat *buf);
int lstat(const char *restrict pathname, struct stat *restrict buf );
int fstatat(int fd, const char *restrict pathname, struct stat *restrict buf, int flag);
摘自《Unix 环境高级编程》一书:
Given a pathname, the stat function returns a structure of information about the named file. The fstat function obtains information about the file that is already open on the descriptor fd. The lstat function is similar to stat, but when the named file is a symbolic link, lstat returns information about the symbolic link, not the file referenced by the symbolic link.
您可以尝试以下操作:
struct stat statbuf;
struct dirent *dirp;
DIR *dp;
int ret, n;
/* fullpath contains full pathname for every file */
if (lstat(fullpath, &statbuf) < 0)
{
printf("error\n");
//return if you want
}
if (S_ISDIR(statbuf.st_mode) == 0)
{
/* not a directory */
}
else
{
//a directory
}
从历史上看,早期版本的 UNIX 系统不提供 S_ISxxx
宏。相反,我们必须在逻辑上AND
st_mode
值与掩码 S_IFMT
,然后将结果与名称为 S_IFxxx 的常量进行比较
。大多数系统在文件中定义此掩码和相关常量。
例如:
struct stat *statptr;
if (lstat(fullpath, statptr) < 0)
{
printf("error\n");
//return if you want
}
switch (statptr->st_mode & S_IFMT) {
case S_IFREG: ...
case S_IFBLK: ...
case S_IFCHR: ...
case S_IFIFO: ...
case S_IFLNK: ...
case S_IFSOCK: ...
case S_IFDIR: ...
}
关于C - 忽略子目录名,只打印文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54723991/
我是pyOpenSSL的新用户,我想用下面的代码制作一个证书 from OpenSSL import crypto as c cert = c.X509() cert.add_extensions([
我有很多包含文件的目录。我想创建一个逗号分隔的 txt 文件,显示目录名称以及该特定目录中的文件,请参见下面的示例: 我在找什么: DirName,Filename 999,123.tif 999,1
如何通过linux命令行将以下文件名(Windows支持的格式)替换为自定义名称。以下仅是一个示例案例。我的测试目录中有 100 多个文件,因此我需要一种自动化方式,而不是为每个文件手动输入“mv”命
我正在制作一个用 PHP 上传文件的表单。这些是我的输入: $file_name = filter_input(INPUT_POST, 'file_name'); $file = filter_i
所以有一个 ftp 服务器(在 Windows 上运行),其中包含一些我需要在我的 vps 上同步的数据。我一直在使用 curlftpfs +rsync 成功地完成这项任务,但最近我不得不添加新目录来
我正在使用 C++ 和 GDAL,进行一些基本练习。我想要构建的其中一件事是创建一个程序,该程序从目录名称中读取其中的文件,然后在 foor 循环中读取数据集并将波段写入新的虚拟栅格。我设法使用 bo
这个问题在这里已经有了答案: What's better of require(dirname(__FILE__).'/'.'myParent.php') than just require('my
我是 ns3 的新手。我有一些用 C++ 编写的简单程序。 我通过以下命令运行我的 ns3 程序 exec "`dirname "$0"`"/../../waf "$@" 谁能解释一下上述线路的功能?
我之前使用的是 statik将文件嵌入到 Go 应用程序中。 在 Go 1.16 中我可以移除那些依赖 例如: //go:embed static var static embed.FS fs :=
我正在尝试使用 Android Studio 构建我的第一个 android 应用程序。不幸的是,每次我打开我的项目时,尝试运行它或 gradle assemble 它我都会收到以下错误: Gradl
谁能解决这个问题?我认为问题可能出在传递给创建文件函数时的 readstring() 参数中。我尝试通过剥离 '\n' 来解决它,但错误仍然存在。除了 readstring() 之外还有其他解决方
如何编写一个名为“abc”的 bash shell 脚本,它接受一个参数,一个目录的名称,并将扩展名“.xyz”添加到目录中所有还没有它的可见文件 我主要编写了更改当前目录中文件名的代码,但我无法让脚
我想知道一种方法是否比另一种更好。我一直在使用 $_SERVER 方法指向当前目录,但是这种方法比 realpath(dirname(_FILE_)) 方法更好还是有什么区别? 最佳答案 $_SERV
我正在尝试重新启动 Jenkins,但它没有说以下错误。有没有人对此有任何线索? $ service jenkins restart Shutting down Jenkins killproc: E
我必须远程传输位于不同目录中的文件。目录与 Google Drive 同步,每天都有新内容添加。我想运行一个每天运行一次的脚本,并将传输新的目录。我可以处理选择新目录的部分。我正在使用 MATLAB
我正在eclipse中构建一个android应用程序。我需要调用用C/C++编写的函数。 我设置了包括NDK,cygwin等在内的所有内容(询问是否需要更多详细信息),但是当我尝试运行该项目时,出现此
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
我有这个代码: BufferedReader in = new BufferedReader (new InputStreamReader(System.in)); System.out.print(
关闭。这个问题需要details or clarity .它目前不接受答案。 想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题. 去年关闭。 Improve this
我是一名优秀的程序员,十分优秀!