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

C++ 遍历所有文件和文件夹,建立文件夹

2015-08-15 11:14 447 查看
首先介绍一下”DWORD”

在win32中有这样的定义:

#define DWORD unsigned long


表示一个32位无符号整型数,或用来表示段地址和段地址的偏移量;Windows下经常用来保存地址(或者存放指针).

C++ 遍历所有文件和文件夹, 包含头文件
#include <windows.h>


WIN32_FIND_DATA fd;

HANDLE hFind = ::FindFirstFile("C:\\*.*", &fd);
if(hFind != INVALID_HANDLE_VALUE)
{
do
{
printf(fd.cFileName);
}
while(::FindNextFile(hFind, &fd));
::FindClose(hFind);
}


如果想遍历所有文件和文件夹,以及所有子目录、子文件,则需要用SetCurrentDirectory设置当前的下一级目录,然后递归调用

GetCurrentDirectory和SetCurrentDirectory是获取和设置的线程的当前工作路径,而不是线程所在路径。下面的代码是源文件所在路径下有一个文件为write.txt,而上一级路径下没有这个文件,来说明这两个函数的功能。

#ifndef _TEST_H

#include <iostream>
#include <windows.h>
#include <string>
#include <stdlib.h>
using namespace std;
int main()
{
char buf[1000];
int i=1000;
GetCurrentDirectory(1000,buf);  //得到当前工作路径

string a;
a.assign(buf);
cout<<a<<endl;
a.append("\\..\\");

FILE *pFile;
pFile = fopen("write.txt","r");
if (pFile == NULL)
cout << "open failure" << endl;
fclose(pFile);

int test = SetCurrentDirectory(a.c_str());  //设置当前路径值
if (test == 0 )
cout << "execute failed\n";
GetCurrentDirectory(1000,buf);
cout << buf << endl;

pFile = fopen("write.txt","r");
if (pFile == NULL)
cout << "open failure" << endl;
else
fclose(pFile);

return 0;
}

#endif //_TEST_H


用到的函数:access和mkdir,分别包含头文件io.h和direct.h如果想深入了解就去查msdn。

char *fileName=".\\1\\2\\3\\a.txt",*tag;
for(tag=fileName;*tag;tag++)
{
if (*tag=='\\')
{
char buf[1000],path[1000];
strcpy(buf,fileName);
buf[strlen(fileName)-strlen(tag)+1]=NULL;
strcpy(path,buf);
if (access(path,6)==-1)
{
mkdir(path);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 遍历