猿问

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

我编写了在特定位置解压缩文件的代码,然后将文件夹的内容复制到解压缩文件夹的外部,然后删除该文件夹。

问题是除了删除文件夹外,一切正常。该文件夹中只有一个文件。文件位置如下:


E:\go\copyDirectory\myfile\mytextfile.txt

zip文件的位置如下:


 E:\go\copyDirectory\myfile.zip

zip 文件只有一个文本文件。zip文件里面的File如下:


E:\go\copyDirectory\myfile.zip\myfile\mytextfile.txt

我得到的错误是:


ERRR::: remove myfile\mytextfile.txt: The process cannot

access the file because it is being used by another process.

提前致谢。


蝴蝶刀刀
浏览 225回答 1
1回答

繁星淼淼

你没有关闭文件。这个: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)            }        }    }()然后您的延迟将在您尝试删除文件之前发生。不过,我建议将其提取到命名函数中。
随时随地看视频慕课网APP

相关分类

Go
我要回答