列出指定目录所有文件并修改文件名的源代码
2014-06-25 15:12
316 查看
shell命令可以很好实现“列出列出指定目录所有文件”的功能。特别需要注意的是,fgets获取每行内容外,还获取了换行符 \r\n(0D0A)。
/* system("dir /b /a-d c:\\*.* >d:\\allfiles.txt"); //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字 system("dir /b /ad c:\\*.* >d:\\alldirs.txt"); //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字 请记住,能用shell命令获取文件、文件夹信息或者操作文件、 文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作, 因为当遇到非法文件夹名或非法文件名或非法文件长度、 非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时, API会处理的不全面或陷入死循环,而shell命令不会。 /a [[:] Attributes] 只显示那些指定属性的目录名和文件名 -d 显示只是文件(而非目录) /b 列出每个目录名或文件名,每行一个(包含文件扩展名)。/b 不显示标题信息或摘要 */ #include "stdafx.h" #include <atlstr.h> #include <iostream> using namespace std; //列出某给定目录的所有文件,并改文件名为1.txt,2.txt... int main( void ) { char files[100][100] = {{'\0'}}; int i = 0; CString filepath="E:\\hello";//1.sire和hello.txt,8字节 CString shellStr; shellStr.Format("dir /B/A-D %s > filelist.txt",filepath); system(shellStr); //system("dir /B/A-D E:\\hello\\*.* > filelist.txt");//执行Windows指令将某一个目录下的所有的文件列出来并输出到一个文本文件中 FILE* fp = fopen("filelist.txt", "rb");//打开文本文件,准备读取目录下的各个文件名(本身就不含有路径在内的 while (!feof(fp) && i < 100)//如果文件没有到结尾而且数组未满 { fgets(files[i], 100, fp);//读取一行(一行写入了目录中的一个文件),并换行;0D0A代表\r\n,files[i]包含了\r\n,所以比常量多出2个字节 if(files[i][0]!='\0') cout << "files[" << i << "]=" << files[i]; CString strTemp1; //strTemp1.Format("%s",filepath);//8 //strTemp1.Format("%s",files[i]);//9/6 strTemp1.Format("%s\\%s",filepath,files[i]);//为什么不行?20/17 //strTemp1+="E:\\hello\\";//strTemp1为9字节 //strTemp1+="hello.txt";//为什么行?18/15字节,常量 //strTemp1+=files[i];//为什么不行?20/17字节,比常量正常情况多出2个字节(实际为2个空格),为什么? strTemp1.TrimRight();//尾部多出2个空格(奇怪?【多了0D0A】),2014.06.25添加:因为比常量多出2个空格导致修改(rename)失败 cout << "strTemp1=" << strTemp1.GetLength() << " files[i]=" << strlen(files[i]); CString strTemp2; strTemp2.Format("%s\\%d.txt",filepath,i+1); if(files[i][0]!='\0') rename(strTemp1,strTemp2); //rename(strTemp1,strTemp2);//直接用strTemp1改名不行? //rename(temp1,temp2); int err_code = GetLastError();//出错信息是123:文件名、目录名或卷标语法不正确。 i++; } //rename("E:\\hello\\1.sire","E:\\hello\\1.txt"); fclose(fp); fp = NULL; system("pause"); return 0; }
相关文章推荐
- 列出指定目录下所有文件的最后被修改时间
- javaFile循环列出指定目录下的所有文件(源代码)
- 当url中未明确指定文件名时,是否列出相关目录下所有文件的开关设置
- 利用Dataview实现搜索指定目录下的所有文件,以指定的条件排序(可以按文件名升降序,最后修改时间升降序)
- javaFile循环列出指定目录下的所有文件(源代码)
- 遍历指定文件下所有的文件夹和文件的路径,文件名,修改日期,类型
- 将指定目录的所有文件及文件夹copy到指定目录下,只copy 7天内创建的或是7天内修改过的
- java 列出指定目录下的所有文件及文件扩展名
- 列出指定目录下的所有文件和目录
- Asp.net 获取指定目录下的后缀名为".doc" 的所有文件名和文件路径
- 列出指定目录下的所有文件的绝对路径
- 如何查看某个指定目录下的所有文件,只要显示其文件名,并把它输出
- 递归列出指定目录下的所有文件名
- 用C#列出指定目录下的所有指定扩展名(多个扩展名)的文件
- 黑马程序员-列出一个目录中所有指定文件,使用FilenameFilter类
- [程序段] 列出指定目录下的所有文件夹名和文件名
- 得到一个指定目录下所有文件的文件名,子目录名不要
- 用C#列出指定目录下的所有指定扩展名(多个扩展名)的文件
- 列出指定目录下的所有文件和目录
- 《Java examples in a nutshell》书中一个关于列出某一目录下的所有目录与文件的程序源代码