c++ 读取文件夹下的所有文件名(实现未知文件名也可以批量读取文件)
来源:互联网 发布:thinkphp数组转字符串 编辑:程序博客网 时间:2024/05/20 17:10
批量读取文件,是一个经常用到的方法,但是不知道文件名怎么批量读取呢?
首先,需要知道的就是一个数据结构!
名为:WIN32_FIND_DATA 必须包含的头文件名称为:#include <windows.h>
百度上的定义:
它意为关于文件的全部属性信息。总计有以下以下9种:文件的标题名、文件的属性(只读、存档,隐藏等)、文件的创建时间、文件的最后访问时间、文件的最后修改时间、文件大小的高位双字、文件大小的低位双字、保留、保留。在这里只有文件标题名和文件的长度可以通过CFile类比较方便的获得,而对于其他几种属性的获取和设置就无能为力了。
以下是该数据结构的定义:
C++ code
typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; //文件属性 FILETIME ftCreationTime; // 文件创建时间 FILETIME ftLastAccessTime; // 文件最后一次访问时间 FILETIME ftLastWriteTime; // 文件最后一次修改时间 DWORD nFileSizeHigh; // 文件长度高32位 DWORD nFileSizeLow; // 文件长度低32位 DWORD dwReserved0; // 系统保留 DWORD dwReserved1; // 系统保留 TCHAR cFileName[ MAX_PATH ]; // 长文件名(最多可达 255 个字符的长文件名),带句点和扩展名 TCHAR cAlternateFileName[ 14 ]; //8.3格式文件名(句点前最多有8个字符,而扩展名最多可以有3个字符) } WIN32_FIND_DATA, *PWIN32_FIND_DATA;
可以注意到,其中就有 cFileName 这个属性,表示的是文件名。
FindFirstFile()和 FindNextFile() 函数将文件的属性获取到 WIN32_FIND_DATA 结构对象中去,并返回一个句柄。
以下是该函数的定义:
C++ code
HANDLE FindFirstFile( LPCTSTR lpFileName, // 文件路径字符串 或路径的字符指针 LPWIN32_FIND_DATA lpFindFileData // 查到的 信息返回到这个指针指向的WIN32_FIND_DATA类型结构体变量中,所以传入了结构体变量的地址,&FindFileData)
返回值 "查找句柄" 类似 fopen返回的文件句柄,fopen返回文件句柄 后续的文件读写fscanf、fprint利用文件句柄操作,同样 FindFirstFile 返回查找句柄 后续FindFirstFile查找 通过该句柄 操作。
*.* 这个标识符,厉害了~
不仅在DOS中,在windows下也可以使用,首先要了解文件命名的格式:在windows中,*代表了所有字符,而*.*的意思是windows下的所有文件名和文件格式,比如在C:\123下有几个文件,123.exe 234.jif 345.ppt 564.bat这些文件的文件名和后缀名不同,当我们不知道怎么概括C:\123下面的文件的时候,可以说成“C盘下123文件夹的*.*”,也就是“ C:\*.* ”
上面的知识理解之后,直接上code吧!
#include <string>#include <iostream> #include <WINDOWS.H> using namespace std;int main(int argc,char *argv[]){string szPath = "E:/test3/*.*";WIN32_FIND_DATA wfd;HANDLE hFind;//HANDLE句柄hFind = FindFirstFile(szPath.c_str(), &wfd);//以下表示FindFirstFile调用失败if (hFind == INVALID_HANDLE_VALUE){cout<<"This Handle is not rightly used";return 0;}if(wfd.cFileName[0] != '.') // 每个文件夹下都有个系统目录"."和"..",点代表当前目录 点点代表上级目录{return 0;}char file_list[800][40] = {0};//设置文件名最长 40 个字符,文件个数最多 800 个int i = 0;do{strcpy(file_list[i], wfd.cFileName); //存储到数组if (++i >= 800) break;} while (FindNextFile(hFind, &wfd));FindClose(hFind);if (file_list[2]) //判断当前目录下是否有文件存在, 若无 ,显示信息并退出程序{cout<<"No File"<<endl;system("pause");return 0;}//输出当前目录下所有文件的文件名for (int i = 2; i < 7; i++) // 数组前两个元素表示的是当前目录和上级目录 . 和 .. 所以从2开始{cout<<file_list[i]<<endl;} system("pause"); return 0;}
将当前目录下的所有文件的文件名保存在字符数组之中以后,批量的打开文件也就随心所欲啦!
实现了未知文件名也可以批量读取文件!
- c++ 读取文件夹下的所有文件名(实现未知文件名也可以批量读取文件)
- 【C++】读取文件夹下所有文件名
- 如何读取文件夹下的所有文件名
- c++读取文件夹下的所有文件名
- C++ 读取文件夹下的所有文件名
- ubuntu C++ 读取文件夹下所有文件的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名(转载)
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- vc++ 读取指定文件夹下所有文件名
- 批量读取文件夹下的文件名【dos命令】
- PHP 递归读取指定文件夹下的所有文件名
- 读取,修改某个文件夹下的所有文件名
- PHP 递归读取指定文件夹下的所有文件名
- matlab读取文件夹里所有文件的文件名
- POJ_3461 Oulipo 【KMP】
- 获取设备唯一标识
- 在导入阿里 坑神SDK 时的新发现。
- 搬家:https://sdlyyxy.github.io/
- 92. Reverse Linked List II
- c++ 读取文件夹下的所有文件名(实现未知文件名也可以批量读取文件)
- URL中特殊符号的处理
- 哈哈,七夕来了,快拿去表白吧
- Python 牵手 MySQL
- Linux&Ubuntu下chm文档阅读问题
- UVa 1605 Building for UN 【技巧】
- Java中负数的移位操作——右移
- MapReduce---自定义分区类实现全排序
- 二叉树非递归后序遍历