vc下遍历指定路径下的文件名

编写初衷 

拟在指定文件夹下新建txt文档并写入数据,采用简单的 0.txt  1.txt ……1001.txt格式命名,每次有新建文本需求时,首先遍历该路径下已经有的文件名所启用的数字,选择未启用的数字或者依照顺序依次命名。

 

 

如图实例,已有文件名见图。

希望代码可以做到,遍历路径后得到0-3,5-6的数字,然后启用4作为新文件名称,如果4.txt已经存在,那么将新建7.txt。

 

流程

 

针对以上目的,数据的代码处理流程主要有:

1、输入指定的路径,获取该文件夹下指定类型的文件名称;

2、从文件名称中拆解数字部分;

3、将这些数字保存在指定结构;

4、对应数据保存,以供下阶段使用。

 

具体代码

 

接口代码见下。可以实现:遍历路径下所有的txt文本并将数字保存。

为了在将名称和文件名对应,甚至后续数据,临时保存的数据结构如下(当然,文件名和实际工程中的其他变量对应,可以类比添加),数据对应保存便于同步更新。

 


typedef struct
{
	int id;
	char fileName[MAXFILENAMELENGTH];
	int fileNameNum;
}FileFindInfo;


typedef struct
{
	int fileNum;
	FileFindInfo fileFindInfo [MAXFILENUM];
}FileFind;
FileFind fileFind;

 

需要特殊注意的:

1、路径为 string 类型,存放在char数组中,string 转为 char 用 strcpy_s;

2、字符串转为int类型用 atoi;

3、拆分路径获取文件名称用 _splitpath;

 

#include "StdAfx.h"
#include<windows.h>
#include<iostream>
#include<string>
#include"direct.h"
#include <io.h>     //_access函数的头文件
#include <stdio.h>


using namespace std;


#define MAXFILENAMELENGTH 500
#define MAXFILENUM 10000
#define _MAX_DRIVE 5
#define _MAX_DIR   100
#define _MAX_DRIVE 50
#define _MAX_DRIVE 10


char drive[_MAX_DRIVE] = {0};
char dir[_MAX_DIR] = {0};
char fname[_MAX_FNAME] = {0};
char ext[_MAX_EXT] = {0};


bool IsRoot(string Path);
void FindAllTxt(string Path);


int fileNum;


// 查找的路径下还有子文件,暂时不考虑,该函数不被调用
bool IsRoot(string Path)
{
	string Root;
	Root=Path.at(0)+"://";
	if(Root==Path)
		return true;
	else
		return false;
}




void FindAllTxt(string Path)
{
	string szFind;
	szFind=Path+"//*.txt";
	char drive[_MAX_DRIVE] = {0};
	char dir[_MAX_DIR] = {0};
	char fname[_MAX_FNAME] = {0};
	char ext[_MAX_EXT] = {0};
	int fileNameNum = 0;


	WIN32_FIND_DATA FindFileData;
	HANDLE hFind=FindFirstFile(szFind.c_str(),&FindFileData);
	if(hFind==INVALID_HANDLE_VALUE)
		return;
	do
	{
		if(FindFileData.cFileName[0]=='.')//过滤本级目录和父目录
			continue;


		string szFile;
		szFile=Path+FindFileData.cFileName;
		fileFind.fileFindInfo[fileNum].id=fileNum;
		strcpy_s(fileFind.fileFindInfo[fileNum].fileName,MAXFILENAMELENGTH,szFile.c_str());
		_splitpath(szFile.c_str(), drive, dir, fname, ext );
		fileNameNum=atoi(fname);


		fileNum++;
		fileFind.fileNum=fileNum;
	}
	while(FindNextFile(hFind,&FindFileData));
	FindClose(hFind);
}

 

注意事项

 

(1)数据结构依照个人需求增删;

(2)该代码是简化版,只做当前路径下所有的txt检查,不再会去检查是否还有文件夹;

(3)注意路径名的字符长度和路径下文件数量修改宏定义。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值