为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 golang 删除解压缩的文件夹

无法使用 golang 删除解压缩的文件夹

Go
蝴蝶刀刀 2021-12-07 10:26:27
我编写了在特定位置解压缩文件的代码,然后将文件夹的内容复制到解压缩文件夹的外部,然后删除该文件夹。问题是除了删除文件夹外,一切正常。该文件夹中只有一个文件。文件位置如下:E:\go\copyDirectory\myfile\mytextfile.txtzip文件的位置如下: E:\go\copyDirectory\myfile.zipzip 文件只有一个文本文件。zip文件里面的File如下:E:\go\copyDirectory\myfile.zip\myfile\mytextfile.txt我得到的错误是:ERRR::: remove myfile\mytextfile.txt: The process cannotaccess the file because it is being used by another process.提前致谢。
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

你没有关闭文件。这个:


defer newTempFileHandle.Close()

在 main 完成时运行,这是在:


err = RemoveContents("./myFiles")

您可以将那段代码包装在一个未命名的函数中:


    func() {

        //read the file or folder handle inside zip

        fileOpenHandle, err := fileReadHandler.Open()

        if err != nil {

            fmt.Println(err)

            os.Exit(1)

        }

        defer fileOpenHandle.Close()

        targetUnZipPath := filepath.Join(tempWrkDir, fileReadHandler.Name)

        if fileReadHandler.FileInfo().IsDir() {

            os.MkdirAll(targetUnZipPath, fileReadHandler.Mode())

            //fmt.Println("Creating directory", path)

        } else {

            // create new dummy file to copy original file.

            newTempFileHandle, err := os.OpenFile(targetUnZipPath, os.O_WRONLY|os.O_CREATE, fileReadHandler.Mode())


            if err != nil {

                fmt.Println(err)

                os.Exit(1)

            }


            defer newTempFileHandle.Close()

            //copying original file to dummy file.

            if _, err = io.Copy(newTempFileHandle, fileOpenHandle); err != nil {

                fmt.Println(err)

                os.Exit(1)

            }

        }

    }()

然后您的延迟将在您尝试删除文件之前发生。不过,我建议将其提取到命名函数中。


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信