如何删除文件拷贝记录,如何删除文件复制记录

首页 > 实用技巧 > 作者:YD1662024-02-03 16:10:15

在编程中,针对磁盘与目录的操作也是非常重要的,本章将重点介绍如何实现针对文件目录与磁盘的操作方法,其中包括了删除文件,文件拷贝,文件读写,目录遍历输出,遍历磁盘容量信息,磁盘格式化,输出分区表数据,监控目录变化等。

11.1 ReadFile

ReadFile是一个文件读取函数,该函数可以将一个文件读入到特定的缓冲区内,在读取之前读者需要自行调用CreateFileA函数打开一个文件,首先来看一下打开文件的函数原型;

HANDLE CreateFileA( LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile );

函数创建或打开一个文件或输入输出(I/O)设备的函数。函数返回一个类型为 HANDLE 的文件句柄,该句柄可用于后续对文件的读写操作。如果文件创建成功,返回值是文件的句柄;如果函数失败,则返回值是 INVALID_HANDLE_VALUE(-1)。

参数说明:

接着是ReadFile函数的原型定义;

BOOL ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped );

参数说明:

该函数如果函数成功读取,则返回非零值,lpNumberOfBytesRead指向的变量将被设置为实际读取的字节数,如果函数失败,则返回零。要获取扩展错误信息,可调用GetLastError()函数。

#include <iostream> #include <Windows.h> int main(int argc, char* argv[]) { HANDLE hFile; DWORD fileSize, readSize; char* buffer; hFile = CreateFile( "d:\\lyshark.exe", // 文件名 GENERIC_READ, // 读取权限 0, // 阻止其他进程访问 NULL, // 子进程不可继承本句柄 OPEN_EXISTING, // 仅当该文件或设备存在时,打开它 FILE_ATTRIBUTE_NORMAL, // 普通文件 NULL); // 不适用模板文件 if (hFile == INVALID_HANDLE_VALUE) { return 0; } fileSize = GetFileSize(hFile, NULL); // 获取文件大小 buffer = (char*)malloc(fileSize 1); // 获取一块内存 buffer[fileSize] = '\0'; // 设置结尾 ReadFile( hFile, // 文件句柄 buffer, // 读取到的文件所存放的缓冲区 fileSize, // 要读取的字节数 &readSize, // 实际读取的字节数 NULL // 用 FILE_FLAG_OVERLAPPED 打开时所需的 ); printf(buffer); CloseHandle(hFile); free(buffer); system("pause"); return 0; }11.2 CopyFile

CopyFile 函数,用于将一个文件从一个位置复制到另一个位置,该函数原型为:

BOOL CopyFile( LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, BOOL bFailIfExists );

其中,lpExistingFileName 表示要复制的文件名,lpNewFileName 表示复制后的新文件名,bFailIfExists 表示如果新文件名已经存在是否覆盖。如果成功复制文件,则返回非零值。如果失败,则返回零。

#include <iostream> #include <Windows.h> // 判断是否为目录 BOOL isDirectory(char* path) { WIN32_FIND_DATA fd; BOOL rel = FALSE; char* p = path; // 查找到第一个文件的句柄 HANDLE hFind = FindFirstFile(path, &fd); while (*p != '\0') p ; // 如果结尾是这两种符号就肯定是目录 if (*(--p) == '\\' || *(p) == ' / ') { *p = '\0'; return TRUE; } // 判断是否获取错误 if (hFind != INVALID_HANDLE_VALUE) { // 文件信息按位与上目录属性, 非目录则全部置零 if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { rel = TRUE; } // 关闭查找句柄 FindClose(hFind); } return rel; } int main(int argc, char* argv[]) { char file_src[MAX_PATH] = { 0 }; char file_dest[MAX_PATH] = { 0 }; strcpy(file_src, "d://lyshark.exe"); strcpy(file_dest, "d://"); if (isDirectory(file_dest)) { // 如果第二个参数是目录,则拼装新的文件路径 sprintf(file_dest, "%s\\%s", file_dest, file_src); } if (CopyFile(file_src, file_dest, 0) == 0) { printf("文件复制失败 \n"); } else { printf("文件已复制 \n"); } system("pause"); return 0; }11.3 MoveFile

MoveFile 函数,用于将文件从一个位置移动到另一个位置,该函数可以用于重命名文件或将文件从一个目录移动到另一个目录。如果要在同一目录中重命名文件,可以将文件的新名称作为 lpNewFileName 参数提供,而 lpExistingFileName 参数应保持不变。如果要移动文件到另一个目录,可以提供新目录的路径和名称作为 lpNewFileName参数,该函数原型如下所示;

BOOL MoveFile( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName );

其中,lpExistingFileName 是要移动的文件的完整路径和名称,lpNewFileName 是文件的新路径和名称。如果文件成功移动,则函数返回非零值,否则返回零,读者需要注意,该函数只能移动文件,无法移动文件夹。如果要移动文件夹,可以使用 MoveFileEx() 函数。

#include <iostream> #include <Windows.h> // 判断是否为目录 BOOL isDirectory(char* path) { WIN32_FIND_DATA fd; BOOL rel = FALSE; char* p = path; // 查找到第一个文件的句柄 HANDLE hFind = FindFirstFile(path, &fd); while (*p != '\0') p ; // 如果结尾是这两种符号就肯定是目录 if (*(--p) == '\\' || *(p) == ' / ') { *p = '\0'; return TRUE; } // 判断是否获取错误 if (hFind != INVALID_HANDLE_VALUE) { // 文件信息按位与上目录属性, 非目录则全部置零 if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { rel = TRUE; } // 关闭查找句柄 FindClose(hFind); } return rel; } int main(int argc, char* argv[]) { char file_src[MAX_PATH] = { 0 }; char file_dest[MAX_PATH] = { 0 }; strcpy(file_src, "d://lyshark.exe"); strcpy(file_dest, "d://lyshark"); if (isDirectory(file_dest)) { // 如果第二个参数是目录, 则拼装新的文件路径 sprintf(file_dest, "%s\%s", file_dest, file_src); } if (MoveFile(file_src, file_dest) == 0) { printf("文件剪切失败 \n"); } else { printf("文件剪切成功 \n"); } system("pause"); return 0; }11.4 DelteFile

DeleteFile 函数用于删除指定的文件,该函数位于windows.h头文件中,此函数只能用于删除文件而无法删除目录,如果需要删除目录则需要使用RemoveDirectory来实现,该函数原型如下:

BOOL DeleteFile( LPCTSTR lpFileName );

其中,lpFileName 参数是一个指向以 NULL 结尾的字符串,表示要删除的文件名,可以是绝对路径或相对路径,函数执行成功时返回 TRUE,否则返回 FALSE,如果删除失败则可以调用GetLastError()得到失败代码。

#include <iostream> #include <Windows.h> int main(int argc, const char* argv[]) { // 如果非零则删除失败 if (!DeleteFile("d://lyshark.exe")) { printf("删除文件错误:%x \n", GetLastError()); } system("pause"); return 0; }

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.