亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將容器中的文件移動到已安裝卷 docker 的文件夾

將容器中的文件移動到已安裝卷 docker 的文件夾

Go
HUH函數 2023-02-21 19:13:16
我正在嘗試在 docker 上運行 golang 應用程序。但是當我嘗試將容器中創建的文件移動到創建的卷所在的文件夾時,出現錯誤:rename /mygo/newt /mygo/store/newt: invalid cross-device link我的高朗代碼package mainimport (    "bufio"    "fmt"    "os"    "path/filepath"    "strings")func main() {    for {        fmt.Println("do you want to create a file,y for yes, n for no")        var ans string        fmt.Scanln(&ans)        if ans == "y" {            var userFile string            fmt.Println("enter name of file")            fmt.Scanln(&userFile)            myfile, err := os.Create(userFile)            if err != nil {                fmt.Printf("error creating file::%v\n", err)                return            }            fmt.Println("enter text to write in file")            reader := bufio.NewReader(os.Stdin)            input, err := reader.ReadString('\t')            if err != nil {                fmt.Println("an error occured while reading::", err)                return            }            input = strings.TrimSuffix(input, "\t")            num, err := myfile.WriteString(input)            if err != nil {                fmt.Println("error while writing to file", err)            }            fmt.Printf("%v characters entered \n", num)            defer myfile.Close()            fmt.Println("created a file", userFile)            fmt.Println("===========")            fmt.Println("moving file to default folder")            pwd, err_pwd := os.Getwd()            if err_pwd != nil {                fmt.Printf("could not get current working directory::%v\n", err_pwd)            }
查看完整描述

1 回答

?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

在 Linux 中有兩種“重命名”文件的方法。

  1. 將目錄條目移動到新位置,但保持文件內容不變。

    這具有速度快的優點。它的缺點是在將文件從一個文件系統移動到另一個文件系統時不起作用。

  2. 創建一個新文件,將數據復制到新文件,刪除舊文件。

    但是,如果源和目標位于兩個不同的文件系統上,它將起作用。

方法#1 在這種情況下不起作用。你需要方法#2。

更多資源:

  • 這個golang-dev 討論解釋了為什么會發生這種情況。

  • This question談論同樣的問題,但在 C++ 的上下文中。

  • Gorenameat()在內部使用系統調用。本手冊頁 解釋了它是如何工作的。您遇到的特定錯誤是 EXDEV 錯誤:“oldpath 和 newpath 不在同一個掛載的文件系統上。(Linux 允許在多個點掛載文件系統,但 rename() 不能跨不同的掛載點工作,即使兩者上都安裝了相同的文件系統。)”


查看完整回答
反對 回復 2023-02-21
  • 1 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號