使用shfileoperation实现Windows文件操作的方法详解

作者:喀什淘贝游戏开发公司 阅读:101 次 发布时间:2023-05-15 15:41:28

摘要:  Windows操作系统的用户普遍使用一些常见的文件操作,例如:复制、剪切、删除、重命名等等。当用户想对多个文件或文件夹进行这些操作时,通常会选择通过Windows资源管理器来完成。但是,如果想要在代码中实现这些操作该怎么办呢?在Windows系统中,我们可以通过使用shfile...

  Windows操作系统的用户普遍使用一些常见的文件操作,例如:复制、剪切、删除、重命名等等。当用户想对多个文件或文件夹进行这些操作时,通常会选择通过Windows资源管理器来完成。但是,如果想要在代码中实现这些操作该怎么办呢?在Windows系统中,我们可以通过使用shfileoperation来实现文件操作。

使用shfileoperation实现Windows文件操作的方法详解

  那么,什么是shfileoperation呢?shfileoperation是Windows系统提供的一个函数库,它可以在代码层面实现对文件和文件夹进行复制、删除、移动、重命名等多项操作,它是Windows文件系统的核心部分,封装了复杂的文件操作,为我们提供了更简洁易用的方式来进行文件操作。下面,我们将详细介绍如何使用shfileoperation实现文件操作。

  一、shfileoperation函数的介绍

  shfileoperation函数是由Shell32.dll动态链接库提供的,它的函数原型为:

  ```c

  int SHFileOperation(

   LPSHFILEOPSTRUCT lpFileOp

  );

  ```

  其中,参数lpFileOp为文件操作结构体,它定义了文件操作的相关参数,如下:

  ```c

  typedef struct _SHFILEOPSTRUCT {

   HWND hwnd;

   UINT wFunc;

   LPCTSTR pFrom;

   LPCTSTR pTo;

   FILEOP_FLAGS fFlags;

   BOOL fAnyOperationsAborted;

   LPVOID hNameMappings;

   LPCTSTR lpszProgressTitle;

  } SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;

  ```

  - hwnd:用来接收操作结果的窗口句柄。一般为 NULL,即默认为不接收结果的窗口。

  - wFunc:执行的操作,如复制、删除等等。其中比较常见的值有:

   - FO_COPY:复制操作

   - FO_DELETE:删除操作

   - FO_MOVE:移动操作

   - FO_RENAME:重命名操作

  - pFrom:源文件路径,可以是单个文件、多个文件或文件夹。

  - pTo:目标文件路径,可以是一个文件夹或一个文件名。

  - fFlags:操作标志位,比较常见的有:

   - FOF_ALLOWUNDO:允许回收站功能,即删除文件会先进入回收站

   - FOF_NOCONFIRMATION:不需要用户确认,直接执行操作

   - FOF_SIMPLEPROGRESS:显示简单进度条

  - fAnyOperationsAborted:指示任何操作是否已被中止。

  - hNameMappings:包含旧路径和新路径之间的映射,一般为NULL。

  - lpszProgressTitle:操作进度窗口标题,用于显示所执行的操作。

  二、使用shfileoperation复制文件

  下面,我们以复制文件为例,演示如何使用shfileoperation函数来实现该操作。具体步骤如下:

  1. 创建并初始化SHFILEOPSTRUCT结构体

  ```c

  SHFILEOPSTRUCT data = { 0 };

  data.hwnd = NULL;

  data.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;

  data.pFrom = L"D: est.txt"; // 源文件路径

  data.pTo = L"D: emp"; // 目标文件夹路径

  data.wFunc = FO_COPY;

  data.lpszProgressTitle = L"文件复制中,请稍候...";

  ```

  其中,源文件路径为D盘下的test.txt文件,目标文件夹路径为D盘下的temp文件夹。

  2. 调用SHFileOperation函数

  ```c

  int ret = SHFileOperation(&data);

  if (ret == 0) {

   printf("文件复制成功! ");

  } else {

   printf("文件复制失败! ");

  }

  ```

  在执行完操作后,返回值ret为0表示操作成功,否则操作失败。

  执行完操作后,我们可以打开目标文件夹temp,可以看到复制的文件已经存在于该文件夹中了。

  三、使用shfileoperation删除文件

  下面,我们以删除文件为例,演示如何使用shfileoperation函数来实现该操作。具体步骤如下:

  1. 创建并初始化SHFILEOPSTRUCT结构体

  ```c

  SHFILEOPSTRUCT data = { 0 };

  data.hwnd = NULL;

  data.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;

  data.pFrom = L"D: est.txt"; // 要删除的文件路径

  data.wFunc = FO_DELETE;

  data.lpszProgressTitle = L"文件删除中,请稍候...";

  ```

  其中,要删除的文件路径为D盘下的test.txt文件。

  2. 调用SHFileOperation函数

  ```c

  int ret = SHFileOperation(&data);

  if (ret == 0) {

   printf("文件删除成功! ");

  } else {

   printf("文件删除失败! ");

  }

  ```

  执行完操作后,我们可以在D盘中查看,发现test.txt文件已被删除。

  四、使用shfileoperation移动文件

  下面,我们以移动文件为例,演示如何使用shfileoperation函数来实现该操作。具体步骤如下:

  1. 创建并初始化SHFILEOPSTRUCT结构体

  ```c

  SHFILEOPSTRUCT data = { 0 };

  data.hwnd = NULL;

  data.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;

  data.pFrom = L"D: est.txt"; // 源文件路径

  data.pTo = L"D:music est.txt"; // 目标文件路径

  data.wFunc = FO_MOVE;

  data.lpszProgressTitle = L"文件移动中,请稍候...";

  ```

  其中,源文件路径为D盘下的test.txt文件,目标文件路径为D盘下的music文件夹中的test.txt文件。

  2. 调用SHFileOperation函数

  ```c

  int ret = SHFileOperation(&data);

  if (ret == 0) {

   printf("文件移动成功! ");

  } else {

   printf("文件移动失败! ");

  }

  ```

  执行完操作后,我们可以查看D盘和D盘下的music文件夹,发现test.txt文件已被移动到music文件夹下。

  五、使用shfileoperation重命名文件

  下面,我们以重命名文件为例,演示如何使用shfileoperation函数来实现该操作。具体步骤如下:

  1. 创建并初始化SHFILEOPSTRUCT结构体

  ```c

  SHFILEOPSTRUCT data = { 0 };

  data.hwnd = NULL;

  data.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;

  data.pFrom = L"D: est.txt"; // 要重命名的文件路径

  data.pTo = L"D: est_rename.txt"; // 重命名后的文件名

  data.wFunc = FO_RENAME;

  data.lpszProgressTitle = L"文件重命名中,请稍候...";

  ```

  其中,需要重命名的文件为D盘下的test.txt文件,重命名后的文件名为test_rename.txt。

  2. 调用SHFileOperation函数

  ```c

  int ret = SHFileOperation(&data);

  if (ret == 0) {

   printf("文件重命名成功! ");

  } else {

   printf("文件重命名失败! ");

  }

  ```

  执行完操作后,我们可以在D盘下查看,发现test.txt文件已变成了test_rename.txt文件。

  六、总结

  本文主要围绕SHFileOperation函数,介绍了如何使用shfileoperation实现Windows文件操作。通过使用该函数,我们可以在代码层面更方便地实现文件操作,同时也方便了日常工作的开发。在实际开发中,我们可以根据需求使用不同的参数组合来完成不同的文件操作,如复制、删除、移动、重命名等等。同时,我们还可以根据实际需求来进行相关配置,比如选择是否显示进度条、是否需要确认等等。

  • 原标题:使用shfileoperation实现Windows文件操作的方法详解

  • 本文链接:https://qipaikaifa1.com/tb/1356.html

  • 本文由喀什淘贝游戏开发公司小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与淘贝科技联系删除。
  • 微信二维码

    CTAPP999

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:189-2934-0276


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部