• [WinAPI] API 9 [文件的删除、复制和移动功能]


    Windows系统为文件的删除、复制、重命名或移动文件提供了相应的API函数。删除文件使用DeleteFile函数;复制文件使用CopyFile函数;重命名文件和移动文件实际是一个操作,使用MoveFile函数。这几个函数的使用都非常简单,下面分别介绍。


    (1) DeleteFile。
    DeleteFile的功能是删除文件。以文件路径作为输入,指向需要删除的文件。文件路径可以是类似于“c:filesdelete.txt”的绝对路径,也可以是类似于“.delete.txt”的相对路径,二相对于可执行文件所在的路径。
    ◇参数
    lpFileName:输入参数,所要删除的文件的相对路径或绝对路径。
    ◇返回值
    返回BOOL值,表示文件删除是否成功。
    ◇使用说明
    如果程序返回失败,可以使用GetLastError函数获取错误信息。

    (2) CopyFile。
    CopyFile的功能是复制文件。通过参数输入复制文件和源路径和目的路径,路径可以是绝对路径也可以是相对路径,还可以通过参数指明如果目的路径已经存在文件,是否覆盖。可以使用CopyFileEx函数进行更为高级的操作,比如在复制进行过程中取消复制等。CopyFileEx可以指定
    一个回调函数来处理文件复制中所可能发生的各种情况。
    ◇参数
    lpExistingFileName:输入参数,已经存在的所需复制文件的源路径。
    lpNewFileName:输入参数,新文件路径,复制文件的目的路径。
    bFailIfExists:输入参数,指明如果在目的路径存在文件时是否覆

    将不覆盖已经存在的文件,如果存在,则返回失败。这时使用GetLastError获取错误代码,将返回80(Ox50)。
    ◇返回值
    返回BOOL值,表示文件复制是否成功。
    ◇使用说明
    如果程序返回失败,可以使用GetLastError函数获取错误信息。


    (3) MoveFile。
    MoveFile的功能是移动、重命名文件和目录。通过参数输入源路径和目的路径,路径可以是绝对路径也可以是相对路径,如果目的路径的文件或目录已经存在,则返回失败。可以使用MoveFileEx函数来指定更多的选项,如果已经存在是否替换等。还可以使用MoveFileWithProgress指定一个回调函数来处理文件移动中所可能发生的各种情况。

    ◇参数
    lpExistingFileName:输入参数,为已经存在的所需移动文件的源路径。
    lpNewFileName:输入参数,新文件路径,移动文件的目的路径。
    ◇返回值
    返回BOOL值,表示文件移动是否成功。
    ◇使用说明
    如果程序返回失败,可以使用GetLastError函数获取错误信息。


    (4) CopyFileEx、MoveFileEx以及MoveFileWithProgreSS.
    这3个API函数功能更丰富,不再做详细介绍.

    本实例使用DeleteFile、CopyFile、MoveFile来完成文件的删除、复制和移动功能。编译生成可执行文件,通过参数来指定程序完成的功能。-d参数表示删除文件,后面跟所需删除的文件路径;-m参数表示移动、重命名文件,之后的参数分别是源路径和目的路径;-c参数表示复制文件,之后跟源路径和目的路径。在复制文件过程中,如果文件已经存在,会提醒用户是否覆盖。

      1 /* ************************************
      2 *《精通Windows API》 
      3 * 示例代码
      4 * wr.c
      5 * 4.3.2    创建、打开、读写文件,获取文件大小
      6 **************************************/
      7 
      8 /* 头文件 */
      9 #include <windows.h>
     10 #include <stdio.h>
     11 
     12 /* ************************************
     13 * DWORD ReadFileContent(LPSTR szFilePath)
     14 * 功能    获取文件大小
     15 *        读取文件内容,并以16进制的形式打印出来
     16 * 参数    LPSTR szFilePath
     17 *        文件路径
     18 **************************************/
     19 DWORD ReadFileContent(LPSTR szFilePath)
     20 {
     21     //文件大小
     22     HANDLE hFileRead;
     23     //保存文件大小
     24     LARGE_INTEGER liFileSize;
     25     //成功读取的文件数据大小
     26     DWORD dwReadedSize;
     27     //累加计算已经读取数据的大小
     28     LONGLONG liTotalRead = 0;
     29     //文件数据缓存
     30     BYTE lpFileDataBuffer[32];
     31 
     32     //打开已经存在的文件,读取内容。    
     33     hFileRead = CreateFileA(szFilePath,// 要打开的文件名
     34         GENERIC_READ,               // 以读方式打开
     35         FILE_SHARE_READ,           // 可共享读
     36         NULL,                      // 默认安全设置
     37         OPEN_EXISTING,             // 只打开已经存在的文件
     38         FILE_ATTRIBUTE_NORMAL,     // 常规文件属性
     39         NULL);                     // 无模板
     40 
     41     //打开文件是否成功。
     42     if(hFileRead==INVALID_HANDLE_VALUE)
     43     {
     44         printf("打开文件失败:%d",GetLastError());
     45     }
     46 
     47     if(!GetFileSizeEx(hFileRead,&liFileSize))
     48     {
     49         printf("获取文件大小失败:%d",GetLastError());
     50     }
     51     else
     52     {
     53         printf("文件大小为:%d/n",liFileSize.QuadPart);
     54     }
     55 
     56     //循环读取并打印文件内容
     57     while(TRUE)
     58     {
     59         DWORD i;
     60 
     61         if(!ReadFile(hFileRead,    //读文件的句柄
     62             lpFileDataBuffer,    //存储读取的文件内容
     63             32,                    //读的大小(字节)
     64             &dwReadedSize,        //实际读取的大小
     65             NULL))                //不使用Overlapped
     66         {
     67             printf("读文件错误:%d/n",GetLastError());
     68             break;
     69         }
     70         printf("读取了%d字节,文件内容是:",dwReadedSize);
     71         
     72         for(i=0; i<dwReadedSize; i++)
     73         {
     74             printf("0x%x ",lpFileDataBuffer[i]);
     75         }
     76         printf("/n");
     77         liTotalRead += dwReadedSize;
     78         if(liTotalRead == liFileSize.QuadPart)
     79         {
     80             printf("读文件结束/n");
     81             break;
     82         }
     83     }
     84     CloseHandle(hFileRead);
     85     return 0;
     86 }
     87 
     88 /* ************************************
     89 *  SaveDataToFile
     90 * 功能    将数据存储到文件末尾
     91 * 参数    LPSTR szFilePath    文件路径
     92 *        LPVOID lpData        需存储的数据
     93 *        DWORD dwDataSize    数据大小(字节)
     94 **************************************/
     95 DWORD SaveDataToFile(
     96                      LPSTR szFilePath,
     97                      LPVOID lpData,
     98                      DWORD dwDataSize)
     99 {
    100     //文件句柄
    101     HANDLE hFileWrite;
    102     //成功写入的数据大小
    103     DWORD dwWritedDateSize;
    104 
    105     //打开已经存在的文件,读取内容。    
    106     hFileWrite = CreateFileA(szFilePath,    // 要打开的文件名
    107         GENERIC_WRITE,            // 以写方式打开
    108         0,                        // 可共享读
    109         NULL,                    // 默认安全设置
    110         OPEN_ALWAYS,            // 打开已经存在的文件,没用则创建
    111         FILE_ATTRIBUTE_NORMAL,    // 常规文件属性
    112         NULL);                    // 无模板
    113     
    114     //判断是否打开成功
    115     if(hFileWrite==INVALID_HANDLE_VALUE)
    116     {
    117         printf("打开文件失败:%d/n",GetLastError());
    118     }
    119 
    120     //设置文件指针到文件尾
    121     SetFilePointer(hFileWrite,0,0,FILE_END);
    122 
    123     //将数据写入文件
    124     if(!WriteFile(hFileWrite,lpData,dwDataSize,&dwWritedDateSize,NULL))
    125     {
    126         printf("写文件失败:%d/n",GetLastError());
    127     }
    128     else
    129     {
    130         printf("写文件成功,写入%d字节。/n",dwWritedDateSize);
    131     }
    132     CloseHandle(hFileWrite);
    133     return 0;
    134 }
    135 
    136 /* ************************************
    137 * int main(void)
    138 * 功能    演示使用SaveDataToFile和ReadFileContent函数
    139 **************************************/
    140 int main(void)
    141 {
    142     LPSTR szFileData = "这是一个例子";
    143     SaveDataToFile("C://show.txt",szFileData,lstrlenA(szFileData));
    144     ReadFileContent("C://show.txt");
    145     return 0;
    146 }
  • 相关阅读:
    关于C语言中的绝对值函数
    B. Interesting drink(水题 二分)
    A. Boring Apartments(水题)
    A. FashionabLee(水题)
    A. Collecting Coins(水题)
    A. Fancy Fence(水题)
    最小公因数,最小公倍数,以及快速幂模板
    android:layout_gravity 和 android:gravity 的区别
    Android开发之Intent略解
    java中类的创建及初始化过程
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3588400.html
Copyright © 2020-2023  润新知