Window Api: 文件管理

xiaoxiao2021-02-28  115

一:删除,复制,重命名,移动文件

#include <windows.h> #include <stdio.h> /** * 删除: -d 文件路径 * 复制: -c 旧文件路径 新文件路径 * 移动/重命名: -m 旧文件路径 新文件路径 */ int main(int argc, PCHAR argv[]) { if(lstrcmp("-d",argv[1]) == 0 && argc == 3){//删除: -d if (!DeleteFile(argv[2])) { printf("Delete Error!: %x\n",GetLastError()); }else printf("Delete Success!\n"); }else if(lstrcmp("-c",argv[1]) == 0 && argc == 4){//复制: -c if(!CopyFile(argv[2],argv[3],TRUE)){//复制,不覆盖已有文件 if(GetLastError() == 0x50){//文件存在的错误编号是0x50 printf("file %s has existed,cover it ? y/n:",argv[3]); if(getchar() == 'y'){ if(!CopyFile(argv[2],argv[3],FALSE))//复制,覆盖已有文件 printf("CopyFile Error!: %x\n",GetLastError()); else printf("CopyFile Success!\n"); }else return 0; } }else printf("CopyFile Success!\n"); }else if(lstrcmp("-m",argv[1]) == 0 && argc == 4){ //移动/重命名: -m if (!MoveFile(argv[2],argv[3])) printf("MoveFile Error!: %x\n",GetLastError()); else printf("MoveFile Success!\n"); }else printf("Arguments Error!\n"); return 0; }

二:创建,打开,读写文件,获取文件大小

#include <windows.h> #include <stdio.h> /** * 功能:获取文件大小,读取文件内容,并以十六进制的形式打印出来 * 参数:文件路径 */ DWORD ReadFileContent(LPSTR szFilePath){ //size of file HANDLE hFileRead; //save size of file LARGE_INTEGER liFileSize; //size of data we have red DWORD dwReadSize; //累加计算已经读取的数据大小 LONGLONG liTotalRead = 0; //文件数据缓存 BYTE lpFileDataBuffer[32]; //打开已经存在的文件,读取内容 hFileRead = CreateFile( szFilePath,//要打开的文件名 GENERIC_READ,//以读方式打开 FILE_SHARE_READ, //可共享读 NULL,//默认安全设置 OPEN_EXISTING,//只打开已存在文件 FILE_ATTRIBUTE_NORMAL,//常规文件属性 NULL//无模板 ); //打开文件是否成功 if(hFileRead == INVALID_HANDLE_VALUE) { printf("Open failed: %d",GetLastError()); } if(!GetFileSizeEx(hFileRead,&liFileSize)){ printf("Get file size failed: %d",GetLastError()); }else{ printf("The size of file is: %d\n",liFileSize.QuadPart); } //循环读取并打印文件内容 while(TRUE){ DWORD i; if(!ReadFile( hFileRead,//读文件的句柄 lpFileDataBuffer,//存储读取文件的内容 32,//读的大小 &dwReadSize,//实际读取的大小 NULL //不使用Overlapped )){ printf("Read Error: %d\n",GetLastError()); } printf("read %d bytes,it is: \n",dwReadSize ); for (i = 0; i < dwReadSize; ++i) { printf("0x%x",lpFileDataBuffer[i] ); } printf("\n"); liTotalRead+= dwReadSize; if(liTotalRead == liFileSize.QuadPart){ printf("Ending\n"); break; } } CloseHandle(hFileRead); return 0; } /** * 功能:将数据追加到文件末尾 * 参数:文件路径,需要储存的数据,数据的大小(字节) */ DWORD SaveDataToFile(LPSTR szFilePath,LPVOID lpData,DWORD dwDataSize){ HANDLE hFileWrite; DWORD dwWritedDataSize; hFileWrite = CreateFile( szFilePath, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS,//打开已经存在的文件,如果没有,则直接创建 FILE_ATTRIBUTE_NORMAL, NULL ); //打开文件是否成功 if(hFileWrite == INVALID_HANDLE_VALUE) { printf("Open Failed: %d",GetLastError()); } //设置文件指针到文件末尾 SetFilePointer(hFileWrite,0,0,FILE_END); //将数据写入文件 if(!WriteFile(hFileWrite,lpData,dwDataSize,&dwWritedDataSize,NULL)){ printf("Write Failed: %d\n",GetLastError()); }else printf("Write Success,Writed: %d bytes.\n",dwWritedDataSize); CloseHandle(hFileWrite); return 0; } int main() { LPSTR szFileData = "The first use of windows Api"; SaveDataToFile("D:/test.my",szFileData,lstrlen(szFileData)); ReadFileContent("D:/test.my"); return 0; }

三:创建目录

#include <windows.h> #include <stdio.h> int main() { //在D盘创建folder1文件夹 LPSTR szDirPath = "D:\\folder1"; if(!CreateDirectory(szDirPath,NULL)){ printf("Create Folder Error! %x\n",GetLastError() ); return 1; } //在当前目录创建hello文件夹 szDirPath = "hello"; if(!CreateDirectory(szDirPath,NULL)){ printf("Create Folder %s Error! %x\n",szDirPath,GetLastError() ); return 1; } printf("Success!\n"); return 0; }

四:获取、设置文件属性和时间 待续。。。

这里写代码片
转载请注明原文地址: https://www.6miu.com/read-53564.html

最新回复(0)