網站首頁 編程語言 正文
學習筆記,寫到哪是哪。
接著上一篇對純文本文件讀寫操作,主要去實現一些文件夾操作。
創建文件夾
創建文件夾的時候往往要先判斷文件夾是否存在。
樣例代碼如下
package main import ( "bufio" "fmt" "io" "os" ) //判斷文件夾是否存在 func HasDir(path string) (bool, error) { _, _err := os.Stat(path) if _err == nil { return true, nil } if os.IsNotExist(_err) { return false, nil } return false, _err } //創建文件夾 func CreateDir(path string) { _exist, _err := HasDir(path) if _err != nil { fmt.Printf("獲取文件夾異常 -> %v\n", _err) return } if _exist { fmt.Println("文件夾已存在!") } else { err := os.Mkdir(path, os.ModePerm) if err != nil { fmt.Printf("創建目錄異常 -> %v\n", err) } else { fmt.Println("創建成功!") } } } func main() { CreateDir("./output") }
執行結果
創建成功!
Process finished with the exit code 0
注意
1、其中os.ModePerm主要是對創建文件夾的授權,了解linux的會比較熟悉。
其中 ModePerm FileMode = 0777,也就是最高權限,可讀可寫可執行。
也可以直接使用os.FileMode(644).String()。
刪除文件和文件夾
使用os.Remove方法來刪除文件,使用os.RemoveAll方法來刪除文件夾。
可以看一下RemoveAll的內部實現,整體上就是遍歷和遞歸操作。
樣例代碼如下
//刪除文件 func RemoveFile(path string) error { _err := os.Remove(path) return _err } //刪除文件夾 func RemoveDir(path string) error { _err := os.RemoveAll(path) return _err }
小結
總的來說直接使用os,和Python一樣,麻煩,還是得找個工具庫來操作,方便簡潔一點。而且一直往上傳遞error的方式讓我頭大,好煩啊。
補充
當然Golang還能實現一些常見的文件操作,如網絡文件下載,讀寫csv文件等,以下是實現代碼
網絡文件下載
package main import ( "fmt" "github.com/zhangdapeng520/zdpgo_file" ) func main() { f := zdpgo_file.New() savePath := "./" // 單個下載 url := "https://avatar.csdnimg.cn/2/9/0/1_togolife.jpg" err := f.Download.Download(savePath, url) if err != nil { fmt.Println("下載失敗:", err) } else { fmt.Println("下載成功") } // 批量下載 urls := []string{ "https://alifei04.cfp.cn/creative/vcg/nowarter800/new/VCG41N695593548.jpg", "https://tenfei02.cfp.cn/creative/vcg/nowarter800/new/VCG41N1014325904.jpg", "https://tenfei05.cfp.cn/creative/vcg/nowater800/new/VCG41545444880.jpg", } f.Download.Downloads(savePath, urls) }
讀寫csv
package main import ( "fmt" "github.com/zhangdapeng520/zdpgo_file" ) func main() { f := zdpgo_file.New() data := [][]string{ {"a", "b", "c"}, {"111", "222", "333"}, {"111", "222", "333"}, {"111", "222", "333"}, {"111", "222", "333"}, {"111", "222", "333"}, {"111", "222", "333"}, {"111", "222", "333"}, {"111", "222", "333"}, {"111", "222", "333"}, {"111", "222", "333"}, } // 寫入 f.Csv.Write("test.csv", data) // 讀取 dataNew, err := f.Csv.Read("test.csv") if err != nil { fmt.Println(err) } fmt.Println(dataNew) }
原文鏈接:https://blog.csdn.net/zhiweihongyan1/article/details/124950138
相關推薦
- 2022-07-13 Andorid 自定義 View - 自定義屬性 - 屬性重復導致沖突
- 2022-08-11 boost.asio框架系列之調度器io_service_C 語言
- 2022-12-07 C++11?成員函數作為回調函數的使用方式_C 語言
- 2022-03-22 C++類常量和類枚舉_C 語言
- 2022-10-22 Kotlin匿名函數使用介紹_Android
- 2023-01-14 C++實現一個簡單消息隊列的示例詳解_C 語言
- 2023-01-15 tensorflow使用tf.data.Dataset?處理大型數據集問題_python
- 2022-08-16 C++超詳細講解友元與內部類_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支