当前位置:首页 > 实用技巧 >

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

来源:原点资讯(www.yd166.com)时间:2024-02-03 16:10:15作者:YD166手机阅读>>

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

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)。

参数说明:

  • • lpFileName:要打开的文件名或设备名,该参数可以是完整路径名、相对路径名或文件名和相对路径名的组合。
  • • dwDesiredAccess:要求对文件进行的访问类型,如 GENERIC_READ 或 GENERIC_WRITE,也可以同时指定。
  • • dwShareMode:其他进程访问该文件时的共享模式,如 FILE_SHARE_READ 或 FILE_SHARE_WRITE。
  • • lpSecurityAttributes:一个指向 SECURITY_ATTRIBUTES 结构的指针,指定文件的安全属性。该参数可以为空,表示文件没有安全属性。
  • • dwCreationDisposition:如何创建新的文件,如 CREATE_NEW 或 OPEN_ALWAYS。
  • • dwFlagsAndAttributes:文件的属性和标志,如 FILE_ATTRIBUTE_NORMAL 或 FILE_FLAG_BACKUP_SEMANTICS。
  • • hTemplateFile:文件句柄,该文件句柄必须是 GENERIC_READ 访问类型的文件。

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

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

参数说明:

  • • hFile: 要读取的文件句柄
  • • lpBuffer: 指向用于存储读取数据的缓冲区的指针
  • • nNumberOfBytesToRead: 要读取的字节数
  • • lpNumberOfBytesRead: 返回实际读取的字节数的指针
  • • lpOverlapped: 指定了异步读取的选项。如果想要同步读取,该参数可以为NULL。

该函数如果函数成功读取,则返回非零值,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; },

栏目热文

如何删掉最近使用的文件记录(怎么删除最近使用的文件)

如何删掉最近使用的文件记录(怎么删除最近使用的文件)

这可不是我想消除罪证,我是怕大热天老板心疼我工作太辛苦。前面删除单条指定的文档使用记录,后面是全面清除打开使用记录。方法...

2024-02-03 16:58:33查看全文 >>

八代雅阁2.4发动机拆卸视频(大修8代雅阁发动机拆装全过程)

八代雅阁2.4发动机拆卸视频(大修8代雅阁发动机拆装全过程)

12年雅阁花了6000多做整备,你觉得值吗?全套整备下来,将近6000块钱。上期视频咱们浅谈了这台雅阁,有很多老铁非常的...

2024-02-03 16:45:04查看全文 >>

7代雅阁拆发动机油底壳(十代雅阁发动机油底壳怎么拆)

7代雅阁拆发动机油底壳(十代雅阁发动机油底壳怎么拆)

雅阁、奥德赛发动机油底壳。大家好,来跟大家介绍一下本田雅阁、奥德赛的u d 壳油底壳,给大家看一下细节。·我们带放油螺丝...

2024-02-03 16:25:53查看全文 >>

本田老雅阁发动机油底壳拆卸(本田老雅阁2.0发动机油底壳拆卸)

本田老雅阁发动机油底壳拆卸(本田老雅阁2.0发动机油底壳拆卸)

众所周知,变速箱是汽车三大机械件之一,常见的变速箱可分为两大种类:手动变速箱和自动变速箱。作为转换马力与功率的变速箱当然...

2024-02-03 16:11:45查看全文 >>

本田雅阁八代油底壳怎么样拆(七代雅阁2.0油底壳怎么拆解)

本田雅阁八代油底壳怎么样拆(七代雅阁2.0油底壳怎么拆解)

本田雅阁重力更换变速箱油。卡驰汽车快修养护中心。尊敬的车主们,您是否想过更换变速箱油呢?变速箱油是汽车发动机的重要组成部...

2024-02-03 16:16:59查看全文 >>

文件管理怎么删除记录(怎么把文件管理的文件彻底删除)

文件管理怎么删除记录(怎么把文件管理的文件彻底删除)

大家的手机在使用一段时间之后啊,是不是都会出现又卡又慢的情况,尤其是安卓手机,这种现象更是非常明显,而且很多朋友啊,也都...

2024-02-03 16:31:57查看全文 >>

如何清除文件修改记录(怎么消除文件上的修改痕迹)

如何清除文件修改记录(怎么消除文件上的修改痕迹)

当我们在日常办公写资料或学习中写论文时,经常会把写好的文档先给领导或老师查看一遍,然后对文档做一些修订并把建议批注在文档...

2024-02-03 16:53:29查看全文 >>

如何清理文件使用记录(怎样清除最近使用的文件)

如何清理文件使用记录(怎样清除最近使用的文件)

你以为将文件拖到回收站,然后清空就是彻底删除了吗?其实并没有彻底删除,系统只是将你删除的文件标记为删除,因为这些数据被标...

2024-02-03 16:52:45查看全文 >>

文件删除记录怎么清空(打开的文件记录怎么删除)

文件删除记录怎么清空(打开的文件记录怎么删除)

文件历史记录会保存文件的副本,因此在文件丢失或损坏时,可以找回它们。在Windows 10上,“文件历史记录”是一项很实...

2024-02-03 16:27:34查看全文 >>

世界五大非地带性热带雨林气候(非地带性热带雨林气候成因)

世界五大非地带性热带雨林气候(非地带性热带雨林气候成因)

雨林是一种特殊的森林类型,重点就在一个“雨”字,依靠丰富的降水量形成茂密的植被。按所处热量带可以分为热带雨林(包括热带季...

2024-02-03 16:41:07查看全文 >>

文档排行