gpt4 book ai didi

c - 如何使用 C 遍历文件夹中的所有文件?

转载 作者:太空狗 更新时间:2023-10-29 16:51:48 28 4
gpt4 key购买 nike

我想从目录中的所有文件名中删除一个特定的子字符串:

-- like 'XYZ.com' from 'Futurama s1e20 - [XYZ.com].avi' --

所以基本上我需要为方法提供所需的子字符串,它必须遍历所有文件名并进行比较。

我不知道如何使用 C 遍历文件夹中的所有文件。

最佳答案

#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>

int main(int argc, char** argv)
{
struct dirent *dp;
DIR *dfd;

char *dir ;
dir = argv[1] ;

if ( argc == 1 )
{
printf("Usage: %s dirname\n",argv[0]);
return 0;
}

if ((dfd = opendir(dir)) == NULL)
{
fprintf(stderr, "Can't open %s\n", dir);
return 0;
}

char filename_qfd[100] ;
char new_name_qfd[100] ;

while ((dp = readdir(dfd)) != NULL)
{
struct stat stbuf ;
sprintf( filename_qfd , "%s/%s",dir,dp->d_name) ;
if( stat(filename_qfd,&stbuf ) == -1 )
{
printf("Unable to stat file: %s\n",filename_qfd) ;
continue ;
}

if ( ( stbuf.st_mode & S_IFMT ) == S_IFDIR )
{
continue;
// Skip directories
}
else
{
char* new_name = get_new_name( dp->d_name ) ;// returns the new string
// after removing reqd part
sprintf(new_name_qfd,"%s/%s",dir,new_name) ;
rename( filename_qfd , new_name_qfd ) ;
}
}
}

虽然我个人更喜欢脚本来完成这项工作,例如


#!/bin/bash -f
dir=$1
for file in `ls $dir`
do
if [ -f $dir/$file ];then
new_name=`echo "$file" | sed s:to_change::g`
mv $dir/$file $dir/$new_name
fi
done

关于c - 如何使用 C 遍历文件夹中的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1271064/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com