Golang | 增删查改文件(文件夹),判断目录是否存在,解压 zip 文件

Golang | 增删查改文件(文件夹),判断目录是否存在,解压 zip 文件

王先生
2024-07-04 / 0 评论 / 11 阅读 / 正在检测是否收录...

判断目录是否存在

        dirPath := "C:\\WINDOWS\\system32\\mlb"
    if err := ensureDirExists(dirPath); err != nil {
        log.Fatalf("Error ensuring directory exists: %v", err)
    }
    log.Println("Directory ensured.")

func EnsureDirExists(path string) error {
    // 检查目录是否存在
    if _, err := os.Stat(path); os.IsNotExist(err) {
        // 如果目录不存在,尝试创建它
        if err := os.MkdirAll(path, 0755); err != nil {
            return err
        }
    }
    return nil
}

删除指定文件

    err := deleteFile("/path/to/your/file.txt")
    if err != nil {
        log.Fatal(err)
    }

func DeleteFile(fileName string) error {
    err := os.Remove(fileName)
    if err != nil {
        return err
    }
    fmt.Printf("File %s has been successfully deleted.\n", fileName)
    return nil
}

递归删除文件夹及其文件夹内的东西

        err := DeleteDirectory("/path/to/your/directory")
    if err != nil {
        log.Fatal(err)
    }

func DeleteDirectory(dirName string) error {
    err := os.RemoveAll(dirName)
    if err != nil {
        return err
    }
    fmt.Printf("Directory %s and its contents have been successfully deleted.\n", dirName)
    return nil
}

解压 zip 文件

        dirPath := "C:\\WINDOWS\\system32\\mlb"
    if err := ensureDirExists(dirPath); err != nil {
        log.Fatalf("Error ensuring directory exists: %v", err)
    }
    log.Println("Directory ensured.")

func EnsureDirExists(path string) error {
    // 检查目录是否存在
    if _, err := os.Stat(path); os.IsNotExist(err) {
        // 如果目录不存在,尝试创建它
        if err := os.MkdirAll(path, 0755); err != nil {
            return err
        }
    }
    return nil
}

解压 zip 文件

        err := unzipFile("/path/to/your/zipfile.zip", "/path/to/target/directory")
    if err != nil {
        log.Fatal(err)
    }

func UnzipFile(zipFilePath string, targetDir string) error {
    // 打开 zip 文件
    r, err := zip.OpenReader(zipFilePath)
    if err != nil {
        return err
    }
    defer r.Close()

    // 遍历 zip 文件中的每一个文件或目录
    for _, f := range r.File {
        // 提取文件信息
        fPath := filepath.Join(targetDir, f.Name)

        // 检查文件是否已经存在,如果存在则跳过
        if _, err1 := os.Stat(fPath); !os.IsNotExist(err1) {
            log.Printf("File %s already exists, skipping...", f.Name)
            continue
        }

        if f.FileInfo().IsDir() {
            // 如果是目录,则创建目录
            os.MkdirAll(fPath, os.ModePerm)
        } else {
            // 如果是文件,则创建并写入文件
            outFile, err := os.OpenFile(fPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
            if err != nil {
                return err
            }
            rc, err := f.Open()
            if err != nil {
                return err
            }
            _, err = io.Copy(outFile, rc)
            if err != nil {
                return err
            }
            outFile.Close()
            rc.Close()
        }
    }

    return nil
}

评论 (0)

取消