C++实现文件名批量修改
问题
用户选择需要修改文件后缀名的目录,输入后缀名后,对该目录下的所有文件后缀名进行修改
实现
读取目录下的所有文件,同时修改文件后缀。在这个过程中,主要用到了几个windows API:
- FindFirstFileA()
- FindNextFileA()
- FindClose()
以及C函数rename()
所用函数
HANDLE FindFirstFileA (LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData);
- 含义:查找目录下的第一个文件
- 参数:
lpFileName
:目录名,如:”D:/Web/new/*” 或者 “D:\\Web\\new\\*” 用双反斜杠是为了防止目录被转义。同时要匹配目录下的文件,最后应该使用通配符*,表示匹配目录内文件 - 参数:
lpFindFileData
: 文件数据,这个一个定义好的数据结构,用于保存读取到的文件的一些属性。其中cFileName
表示文件名;具体定义如下
typedef struct _WIN32_FIND_DATAA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
CHAR cFileName[MAX_PATH];
CHAR cAlternateFileName[14];
} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA; - 返回:返回一个文件句柄,用于之后的关闭或者查找下一个文件的操作
BOOL FindNextFileA (HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData);
- 含义:查找下一个文件
- 参数:
hFindFile
:文件句柄,由FindFirstFileA
返回获得 - 参数:
lpFindFileData
: 文件数据,这个一个定义好的数据结构,用于保存读取到的文件的一些属性。其中cFileName
表示文件名 - 返回:布尔值,表示是否查找到下一个文件
BOOL FindClose (HANDLE hFindFile);
- 含义:关闭文件句柄
- 参数&#x