文件复制与删除功能实现

【Python/PE】python中实现文件操作的几种功能(删除指定目录下的所有内容,文件复制等) ###Date: 2018/1/14 ###Author:SoaringLee ============================================================================= 1、文件操作功能1:清空指定目录(很有用哦) # -*- coding: cp936 -*- import os import shut 阅读详情

文件复制、删除是操作系统文件系统最基础的操作,我们平时在资源管理器里右键复制、删除文件,底层本质上都是调用系统提供的 API 完成。本次实验基于 Windows API,使用 C 语言实现文件复制与删除功能,理解文件操作背后的调用逻辑,同时区分「API 直接调用」和手动读写缓冲区复制的差异。

环境:Windows + Dev-C++ / VS,依赖 Windows.h

一、原理简述

  1. 文件复制:CopyFileA 是 Windows 提供的文件复制 API。它接收源文件路径、目标路径、是否禁止覆盖标志。当第三个参数为TRUE,目标文件已存在时复制失败;为FALSE则直接覆盖原有文件。API 内部会完成读取源文件数据、写入新文件、更新文件元信息等操作。
  2. 文件删除:DeleteFileA 用于删除文件。注意:它只是删除文件目录项,磁盘上的数据块不会立刻清零,在没有被新数据覆盖前,文件数据有机会恢复,这也是数据恢复软件的原理。该 API 不能直接删除文件夹。

补充:如果想要手动实现复制(不调用 CopyFile),思路是CreateFile打开源文件→ReadFile循环读缓冲区→WriteFile写入目标文件,适合理解 IO 读写流程。

二、完整代码实现

#include <stdio.h>
#include <windows.h>

/**
 * @brief 复制文件
 * @param src 源文件路径
 * @param dst 目标文件路径
 * @return 成功返回1,失败返回0
 */
int CopyMyFile(const char* src, const char* dst)
{
    // TRUE:目标存在则不覆盖;FALSE:允许覆盖
    BOOL ret = CopyFileA(src, dst, TRUE);
    if (ret)
    {
        printf("✅ 文件复制成功:%s -> %s\n", src, dst);
        return 1;
    }
    printf("❌ 文件复制失败,错误码:%d\n", GetLastError());
    return 0;
}

/**
 * @brief 删除文件
 * @param path 待删除文件路径
 * @return 成功返回1,失败返回0
 */
int DelMyFile(const char* path)
{
    BOOL ret = DeleteFileA(path);
    if (ret)
    {
        printf("✅ 文件删除成功:%s\n", path);
        return 1;
    }
    printf("❌ 文件删除失败,错误码:%d\n", GetLastError());
    return 0;
}

int main()
{
    // 测试路径,可自行修改
    char src[] = "test.txt";
    char dst[] = "test_copy.txt";

    CopyMyFile(src, dst);
    DelMyFile(dst);

    system("pause");
    return 0;
}

三、代码说明

  1. CopyFileA:A 代表 ANSI 版本字符串,对应char*;还有CopyFileW宽字符版本,配合wchar_t使用。
  2. GetLastError():获取 Windows 系统调用失败的错误码,方便排查问题,常见错误:
    • 2:找不到文件(源路径写错)
    • 80:文件已存在(因为第三个参数 TRUE 禁止覆盖)
    • 5:权限不足
  3. DeleteFileA:无法删除正在被其他程序占用打开的文件,必须等文件句柄全部关闭后才能删除。
  4. 局限:这套 API 只支持文件,不能直接复制 / 删除文件夹;文件夹操作需要使用SHFileOperation或者递归遍历。

四、运行测试

  1. 在程序同目录新建 test.txt,随便写一点内容;
  2. 编译运行程序;
  3. 程序先复制出 test_copy.txt,随后将这个副本删除;
  4. 如果再次运行,因为副本已经不存在,删除会报错。

五、拓展思考

  1. 手动读写缓冲区实现复制:不用CopyFile,自己ReadFile+WriteFile循环读写,适合学习文件 IO。
  2. 文件夹批量复制删除:需要递归遍历目录,逐个处理里面所有文件。
  3. 安全删除:普通删除只是取消目录项引用;如果要防止恢复,需要多次覆写磁盘块。
  4. 跨平台:Linux 下没有这套 WinAPI,使用open/read/write/unlink系统调用实现。

六、总结

通过本次代码实现,我们直观看到高层文件操作的系统调用封装。操作系统屏蔽了磁盘扇区、文件分配表等底层细节,给应用程序提供简单易用的 API。文件复制本质是数据的读取 + 写入;文件删除只是解除文件名和磁盘数据块的映射,并不是立刻抹除数据。

到底是什么决定了二极管的最高工作频率? 硬件工程师,应该都用过二极管的吧,不过也许有一个误区,大多数人可能并不知道,或者说是理解有问题,下面就来细细说下。 一个问题 先提一个问题:到底是什么决定了二极管的最高工作频率? 估计有不少人会回答是二极管反向恢复时间Trr,也有人会说是二极管结电容,那到底谁是对的呢?或者说都一样,反向恢复时间由结电容决定? 到底什么决定了二极管的最高工作频率,我们暂且不论,不过需要知道的是,二极管的反向恢复时间和结电容根本就是两回事,反向恢复时间绝不能等同于结电容的充放电时间。 为什么我这么说呢?. 阅读详情

相关推荐

头歌操作系统2.3系统调用命令ls执行的系统调用

设置版本0内核为分析对象。然后一直c直到虚拟机出现。然后一直c就是答案了。

m0_74128952的博客 1万+

MFC实现文件复制删除功能

用MFC实现指定文件夹下所有文件的复制(包括含有子文件夹),删除指定文件夹下所有文件功能 #include #include //#include   using namespace std; void myCopyDirectory(CString source, CString target) { CFileFind finder; bool bWorking = f

Coder is Poet 566

数字通信:信源编码、信道编码、调制、物理信道、解调、信道解码、信源解码

在通信系统中,信息的传输通常需要经过一系列的处理步骤,确保数据可以在信道中高效且可靠地传输。以下是信源编码、信道编码、调制、物理信道、解调、信道解码、信源解码的具体含义及其常见技术的解释。

weixin_44012667的博客 4808

Java递归实现操作系统文件的复制、粘贴和删除功能

通过Java IO递归实现操作系统对文件的复制、粘贴和删除功能,剪切=复制+粘贴+删除 代码示例: import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; ...

astt2121的博客 205

从FOC到你的无人机:深入浅出讲透Clark/Park变换在无刷电机控制中的核心作用

本文深入解析Clark变换与Park变换在无刷电机控制中的核心作用,揭示其如何将三相交流电转换为旋转坐标系下的直流量,实现无人机电机的高效精准控制。通过STM32硬件加速和工程实践案例,展示这对数学变换如何成为FOC算法的神经中枢,大幅提升系统响应速度和能效表现。

weixin_42628941的博客 169

ESP32使用microPython控制240x240彩色屏幕显示中文

王铭东老师详细讲解了讲了关于240x240屏幕的一些基础东西,我这里在原功能的基础上拓展了中文显示的功能,顺带修改了实际操作过程中程序中遇到的一些问题。

m0_59452630的博客 1万+

java如何递归复制文件_Java递归实现操作系统文件的复制、粘贴和删除功能

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io....

weixin_39884738的博客 92

手把手教你用Verilog在FPGA上驱动0.96寸OLED(I2C协议,含完整代码和字库)

本文详细介绍了如何使用Verilog在FPGA上通过I2C协议驱动0.96寸OLED显示屏,包含完整的硬件连接指南、I2C协议解析、Verilog代码实现及字库设计。从初始化序列到字符显示引擎,提供可立即上手的解决方案,适合嵌入式系统开发者快速实现OLED显示功能。

weixin_29655587的博客 328

Linux C 实现文件复制、文件及文件夹删除功能

Linux下的文件操作其实是个很普通的小功能,Linux C提供了一些系统函数可以调用,我们使用的时候只需按照自己的需要封装一下即可。 1. 文件复制 实现文件从一个目录复制到另外一个目录,以下是最简单的操作,正式的工程中为了严谨起见,尽量加上错误检查。 #include <stdio.h> #include <stdlib.h> //#include <st...

牧羊女 1010

ExpressLRS 915MHz vs 2.4GHz:实测对比与TX12遥控器的最佳搭配方案

本文深入对比了ExpressLRS 915MHz与2.4GHz两种频段在穿透能力、延迟、抗干扰等方面的实测表现,并结合RadioMaster TX12遥控器的硬件特性,提供了从微型花飞到极限远航等不同场景下的最佳搭配方案与EdgeTX系统配置指南,帮助FPV玩家根据核心飞行需求做出精准选择。

milk8的博客 445

网络变更:APIC 节点替换

Fabric Name,Controller ID,TEP Address Pool 等信息必须相同;如果故障设备是 APIC1 还需要重新配置管理密码。此过程可能需要 10 分钟左右,在此期间目标 APIC 可能在 Available/Unavailable 状态翻滚。APIC 获取 TEP 地址后,进入 fully-fit。通过 CLI 以及配置的密码登录目标 APIC。

m0_54931486的博客 320

java递归实现 堆的删除_Java递归实现操作系统文件的复制、粘贴和删除功能

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io....

weixin_40001245的博客 76

SAP-ABAP:ABAP 开发基础概念入门:写给刚踏入 SAP 开发世界的新人

本文介绍了 ABAP 开发语言的基础概念,帮助 SAP 开发新人快速入门。主要内容包括: ABAP 的发展历程与核心优势 - 作为 SAP 平台的专属语言,ABAP 在企业级应用开发中具有深度集成、数据处理高效和长期稳定的特点 ABAP 开发环境概览 - 介绍了 SE38、SE80 等关键事务码,以及 ABAP 工作台的核心组件和开发权限管理 基础语法入门 - 重点讲解了 ABAP 特有的数据类型体系(特别是结构体和内表),并通过 Hello World 示例展示程序基本结构 文章通过对比 ABAP 与 J

baidu_35680696的博客 511

keil调用bat文件,实现删除、复制、加密文件功能

用法 通过如下方式打开“User”子标签 可以看到左边有3个触发条件: “Before Compile C/C++ File”:编译C/C++源文件前触发 “Before Build/Rebuild”:Build之前 “After Build/Rebuild”:Build之后 每个触发条件后,可以添加两条指令:“Run #1”、“Run #2”   点指令栏后面的文件图标,可以把某个路径的bat文件添加进来。然后keil就会自动在满足上面3个触发条件时,调用对应的bat文件来执行了。 例子   比如我要

qlexcel的专栏 4768

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

实现文件的创建、删除、复制、压缩、解压以及目录的创建、删除、复制、压缩解压等功能

/** *  */package com.thinkgem.swordcm.common.utils;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java....

没有故事的博主 293

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

FileUtils文件操作工具类 * 实现文件的创建、删除、复制、压缩、解压以及目录的创建、删除、复制、压缩解压等功能

FileUtils文件操作工具类 * 实现文件的创建、删除、复制、压缩、解压以及目录的创建、删除、复制、压缩解压等功能

weixin_46597615的博客 813

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

文件操作工具类 * 实现文件的创建、删除、复制、压缩、解压以及目录的创建、删除、复制、压缩解压等功能

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import...

没有故事的博主 308

Java实现对于文件的多种操作,复制、删除、重命名、剪切文件、统计指定类型文件数等10个功能

代码实现了 文件操作类接口:

我的blog 6199

使用 C++ 实现文件复制与删除

在日常的编程实践中,文件操作是不可避免的,无论是读取、写入还是复制文件。C++ 提供了丰富的文件处理库,使得这些操作变得相对简单。在本文中,我们将深入分析一个简单的 C++ 程序,该程序实现了文件的复制和删除功能。我们将从代码解析、功能实现、错误处理以及代码优化等方面进行详细讲解。

qq_50394172的博客 1550

C++ 文件的复制、删除、重命名

一、文件的复制 #include &lt;iostream&gt;#include &lt;fstream&gt;using namespace std; int CopyFile(char *SourceFile,char *NewFile){ifstream in;ofstream out;in.open(SourceFile,ios::binary);//打开源文件if(in.fail(...

weixin_34407348的博客 137

实现文件复制、剪切、删除操作 Java

package FileOperation; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException; /** Java实现文件复制、剪切、删除操作* 文件指文件或文件夹* 文件分割符统一用"//"*/ public class ...

hepeng_8的专栏 207

(集合)JAVA文件操作--复制、粘贴、删除、剪切

原文链接: http://xqjay19910131-yahoo-cn.iteye.com/blog/1294119

momo_Pluto的专栏 5645

java基础之文件的复制,删除,剪切(利用递归)

上一篇文章已经分享了关于流的基础内容,下面就来实战一下 文件的复制 package cn.bzu.look.dao; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyFileTest...

奋斗的哼哼 351

文件上传,复制,删除文件

1.这是点击"文件上传"(生成一个文件夹,把每次上传的文件放入到这个文件夹里面) @ResponseBody @RequestMapping("/upload") public JSONArray insertMessageXML(MultipartHttpServletRequest request){ Iterator<String> fileNames = request...

qq_43078167的博客 303

在C语言中实现文件的复制与移动功能

在写入过程中,检查fwrite的返回值,确保写入的字节数与读取的字节数一致,若不一致则表示写入失败,进行相应的错误处理。在文件管理程序中,实现文件的移动功能可以帮助用户对文件进行分类整理。另一种是在支持文件重命名操作的系统中,直接使用重命名函数将源文件重命名为目标文件路径,从而实现文件的移动。在C语言中,对于第一种方式,可以借助前面实现的文件复制函数,再结合remove函数来删除源文件。在moveFile函数中,首先尝试使用rename函数直接重命名源文件为目标文件路径,若操作成功,提示文件移动成功。

Jhao987654的博客 1121
上一篇: Canvas 2D 图形变换
下一篇: 用 wx.chooseMedia 做照相和摄像(附预览图片扩展)
zcmdcsdn_
博客等级 码龄71天 0粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值