使用Windows 文件操作的几个API函数创建一个命令行小工具

47 阅读1分钟

使用的API

我们使用DeleteFile, CopyFile, MoveFile进行测试

API简介
DeleteFile删除文件
CopyFile拷贝文件
MoveFile移动文件或重命名文件

代码

#include <Windows.h>
#include <stdio.h>


int main(int argc, PTCHAR argv[]) {

    if (0 == lstrcmp("-d", argv[1]) && argc == 3) {
        // 删除
        if (!DeleteFile(argv[2])) {
            printf("DeleteFile failed\n");
        } else {
            printf("File deleted\n");
        }
    }
    else if (0 == lstrcmp("-c", argv[1]) && argc == 4) {
        // -c 拷贝
        if (!CopyFile(argv[2], argv[3], TRUE)) {   // TRUE表示如果新复制的文件已经存在的话复制失败
            if (GetLastError() == 0x50) {
                // 目标文件已经存在了
                printf(("文件%s已经存在,是否覆盖? y/n:"), argv[3]);
                if ('y' == getchar()) {
                    // 强行覆盖掉
                    if (!CopyFile(argv[2], argv[3], FALSE)) {  // FALSE表示不管目标文件存不存在,直接覆盖掉
                        printf("CopyFile failed %d\n", GetLastError());
                    } else {
                        printf("File copied\n");
                        return 0;
                    }
                } else {
                    printf("CopyFile aborted\n");
                    return 0;
                }
            }
        } else {
            printf("File copied\n");
        }
    }
    else if ((0 == lstrcmp("-m", argv[1])) && argc == 4) {
        // -m 移动
        if (!MoveFile(argv[2], argv[3])) {
            printf("移动失败: %d\n", GetLastError());
        }
        else {
            printf("移动成功\n");
        }
    }
    else {
        printf("usage: mu [-d|-m|-c] [filename] <filename>");
    }

    return 0;
}

测试

拷贝文件

image.png

删除文件

image.png

移动文件

image.png