您的位置:首页 > 编程语言

列出指定目录所有文件并修改文件名的源代码

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐