如何读取所有文件夹下的所有文件

原创 2013年12月02日 00:02:20
#include <stdio.h>
#include <stdlib.h>
#include <sys/dir.h>
#include <sys/stat.h>
#include <string.h>

//判断是否为目录

int IS_DIR(const char* path)
{
         struct stat st;
         lstat(path, &st);
         return S_ISDIR(st.st_mode);
}

//遍历文件夹de递归函数
void List_Files_Core(const char *path, int recursive)
{
         DIR *pdir;
         struct dirent *pdirent;
         char temp[256];
         pdir = opendir(path);
	 char new_temp[256];
	 char buffer[500];
	 int i=1;
         if(pdir)
         {
                 while(pdirent = readdir(pdir))
                 {
                           //跳过"."和".."
                           if(strcmp(pdirent->d_name, ".") == 0
                                     || strcmp(pdirent->d_name, "..") == 0)
                                   continue;

                           sprintf(temp, "%s/%s", path, pdirent->d_name);
                           printf("%s\n", temp);
			  // sprintf(new_temp,"%s/%d",pdirent->d_name,i++);
			  // rename(temp,new_temp);
			  // printf("%s\n",new_temp);
			   sprintf(buffer,"%d",i++);
			   rename(pdirent->d_name,buffer);
			   sprintf(new_temp,"%s/%s",path,pdirent->d_name);
			   printf("%s\n",new_temp);
                           //当temp为目录并且recursive为1的时候递归处理子目录
                           if(IS_DIR(temp) && recursive)
                           {
                                   List_Files_Core(temp, recursive);
                           }
                 }
          }
         else
         {
                  printf("opendir error:%s\n", path);
          }
          closedir(pdir);

}
//遍历文件夹的驱动函数
void List_Files(const char *path, int recursive)
{
          int len;
          char temp[256];

          //去掉末尾的'/'
          len = strlen(path);
          strcpy(temp, path);
          if(temp[len - 1] == '/') temp[len -1] = '\0';
 
          if(IS_DIR(temp))
          {
                   //处理目录
                   List_Files_Core(temp, recursive);
          }
         else   //输出文件
         {
                  printf("%s\n", path);
         }
}

int main(int argc, char** argv)
{
          if(argc != 2)
         {
                     printf("Usage: ./program absolutePath\n");
                     exit(0);
         }

         List_Files(argv[1], 1);
         return 0;
}

这个代码是参考别人的,但是我记不清来源的网址,在此表示道歉

这个我还没有实现我想要的功能,我想实现的就是简单的读取所有指定文件下的所有文件并且将他们改名字,我做这个的目的是因为我收集了很多暴力音频的文件可是分布在不同的文件夹下,我想统一copy出来直接改名字改成i++的型的这样方便成为training data,这样我在SVM下处理就很方便

等实现后我在把代码粘上去

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

修改过后的程序,基本上可以满足我的要求但是还是有点缺陷,不能把文件复制出来,只能连着文件夹一起复制,还的继续修改

#include <stdio.h>
#include <stdlib.h>
#include <sys/dir.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>

//char location_foder[256];
//建立一个文件夹存取内容
char *creat_foder()
{
	char *location_foder = "/home/zf/zf/1";
        mkdir(location_foder,S_IRUSR|S_IWUSR);
	//printf("%s\n",location_foder);
	return location_foder;
	
}

//copy内容
/*void copy_content()
{
	char *location_foder;
	char file_path[222];
	strcpy(file_path,creat_foder());
	//system("cp /home/zf/zf/1.c /file_path");
	//printf("%s\n%s\n",file_path,creat_foder());
	char new_temp[256];
	char new_name[10];
	int i=0;
	sprintf(new_name,"%d%s",i++,".wav");
	sprintf(new_temp,"%s/%s",file_path,new_name);
	extern int errno;
	char old_name[50];
	if(rename(old_name,new_temp)==0)
	{
		printf("Moved OK!\n");
	}
	else
	{
		printf("cannot moved!\n");
		printf("errno: %d\n",errno);
		printf("ERO :%s\n",strerror(errno));
	}
}*/
//判断是否为目录
int IS_DIR(const char* path)
{
         struct stat st;
         lstat(path, &st);
         return S_ISDIR(st.st_mode);
}

//遍历文件夹的递归函数
void List_Files_Core(const char *path, int recursive)
{
         DIR *pdir;
         struct dirent *pdirent;
         char temp[256];
         pdir = opendir(path);
	 char new_temp[256];
	 char buff[10];
	 char mv_buff[10];
	 int i=1,j=1;
	 char mv_temp[256];
         if(pdir)
         {
                 while(pdirent = readdir(pdir))
                 {
                           //跳过"."和".."
			 if(strcmp(pdirent->d_name, ".") == 0
					 || strcmp(pdirent->d_name, "..") == 0)
                                   continue;
                          
                           sprintf(temp, "%s/%s", path, pdirent->d_name);
                          // printf("%s\n", temp);
			  printf("%s\n%s\n",path,pdirent->d_name);
	                  
			   sprintf(buff,"%d%s",i++,".wav"); 
			   sprintf(mv_buff,"%d%s",j++,".wav");
			   strcpy(pdirent->d_name,buff);
			   printf("%s\n",pdirent->d_name);
		           sprintf(new_temp,"%s/%s",path,pdirent->d_name);
			   printf("%s\n",new_temp);
			   sprintf(mv_temp,"%s/%s",creat_foder(),mv_buff);
			   printf("%s\n",mv_temp);
			   /*extern int errno; 
			   if(rename(new_temp,mv_temp)==0)
			   {
				printf("OK\n");
			   }
			   else
			   {
   				printf("cannot move!\n");
				printf("errno :%d\n",errno);
				printf("ERO: %s\n",strerror(errno));
			   }*/
			  //rename(new_temp,"/home/zf/zf/1");
			  // sprintf(new_temp,"%s/%d",pdirent->d_name,i++);
			  // rename(temp,new_temp);
			  // printf("%s\n",new_temp);
			   //sprintf(buffer,"%d",i++);
			   //rename(pdirent->d_name,buffer);
			   //sprintf(new_temp,"%s/%s",path,pdirent->d_name);
			   //printf("%s\n",new_temp);
			   //rename(pdirent->d_name,"zxczxc");
			   //sprintf(new_temp,"%s/%s",path,pdirent->d_name);
			   //printf("%s\n",new_temp);
                           //当temp为目录并且recursive为1的时候递归处理子目录
                           if(IS_DIR(temp) && recursive)
                           {
                                   List_Files_Core(temp, recursive);
                           }
                 }
          }
         else
         {
                  printf("opendir error:%s\n", path);
          }
          closedir(pdir);

}
//遍历文件夹的驱动函数
void List_Files(const char *path, int recursive)
{
          int len;
          char temp[256];

          //去掉末尾的'/'
          len = strlen(path);
          strcpy(temp, path);
          if(temp[len - 1] == '/') temp[len -1] = '\0';
 
          if(IS_DIR(temp))
          {
                   //处理目录
                   List_Files_Core(temp, recursive);
          }
         else   //输出文件
         {
                  printf("%s\n", path);
         }
}

int main(int argc, char** argv)
{
	//char location_foder[256];
        //printf("please input the location:\n");
        //gets(location_foder);
         creat_foder();
	// copy_content();
          if(argc != 2)
         {
                     printf("Usage: ./program absolutePath\n");
                     exit(0);
         }

         List_Files(argv[1], 1);
         return 0;
}


如何用C#获取指定文件夹下所有文件名?

如题:         比如我要在ASP.NET程序的服务器上DATA文件夹下所以有文件名.然后输出.希望用C#代码实现... 可以用   Directory.GetFiles();方法... 返回包...
  • apinghappy
  • apinghappy
  • 2008年01月22日 17:21
  • 12755

python 查找文件夹下面的所有文件,读取文件

查找文件夹所有文件代码:import os FindPath = 'c:/Users/yang/Documents/python/' FileNames = os.listdir(FindPath) ...
  • u012235274
  • u012235274
  • 2016年05月04日 15:17
  • 3049

Java自动读取指定文件夹下的所有文件

能够自动读取文件夹下的所有文件在处理或者读取数据的时候作用很大,要不然需要手动修改文件路径,非常麻烦。如果该文件夹下只有几个文件倒是还好,但是一旦文件的数量非常大的时候,将导致工作量非常大,而且还可能...
  • u010297791
  • u010297791
  • 2016年09月28日 10:44
  • 2218

python 扫描目录下所有文件并读取文件

先介绍两个函数: 一。os.walk()可以得到一个三元tupple(dirpath,sub_dirs, filenames),其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的...
  • wang725
  • wang725
  • 2015年11月27日 16:01
  • 5902

如何用python遍历文件夹下的所有excel文件

大数据处理经常要用到一堆表格,然后需要把数据导入一个list中进行各种算法分析,简单讲一下自己的做法: 1.如何读取excel文件 网上的版本很多,在xlrd模块基础上,找到一些源码: import ...
  • u012013017
  • u012013017
  • 2017年02月27日 15:03
  • 1335

Java中读取某个目录下的所有文件和文件夹

import java.io.File;public class Test1 { public static void main(String[] args) {  String path="d:/"...
  • lihaiyun718
  • lihaiyun718
  • 2011年03月26日 18:37
  • 98732

C/C++ 获取文件夹下所有文件名 windows和linux通用

参考: http://www.cnblogs.com/xudong-bupt/p/3504442.html ###########################################...
  • u012005313
  • u012005313
  • 2016年02月18日 17:08
  • 16767

matlab读取文件夹里所有文件的文件名

fileFolder=fullfile('F:\matlab\releasedata\images\plane');%文件夹名plane dirOutput=dir(fullfile(fileFol...
  • u013177494
  • u013177494
  • 2017年07月05日 19:14
  • 2341

java递归读取目录下的所有文件

java递归读取目录下的所有文件(包含子目录下的所有文件)大概思路如下:通过file.listFiles()方法获取目录下的所有文件(包含子目录下的所有文件),得到files[]数组,然后遍历读取的所...
  • chaoyueygw
  • chaoyueygw
  • 2016年12月05日 16:49
  • 4523

Python获取文件夹下所有的文件路径列表

使用os.walk os.walk 函数对每个文件夹进行遍历,并返回(文件夹名,文件夹下的子文件夹名,文件夹下的文件名) def all_path(dirname): result = []...
  • yesunhao
  • yesunhao
  • 2016年05月22日 23:08
  • 1224
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何读取所有文件夹下的所有文件
举报原因:
原因补充:

(最多只允许输入30个字)