佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Golang 文件操作:刪除指定的文件方式

Golang 文件操作:刪除指定的文件方式

熱門標(biāo)簽:服務(wù)外包 鐵路電話系統(tǒng) 呼叫中心市場需求 Linux服務(wù)器 網(wǎng)站排名優(yōu)化 AI電銷 百度競價(jià)排名 地方門戶網(wǎng)站

我就廢話不多說了,大家還是直接看代碼吧~

package main 
import "os" 
func main () { 
    err := os.Remove(logFile) 
	if err != nil {
		// 刪除失敗 
	} else {
        // 刪除成功	 
	}
}

補(bǔ)充:[Golang]文件/文件夾一般操作:判斷、復(fù)制、刪除、遍歷

1. 檢查指定路徑是否為文件夾

func IsDir(name string) bool {
 if info, err := os.Stat(name); err == nil {
  return info.IsDir()
 }
 return false
}

2. 檢查文件是否存在

func FileIsExisted(filename string) bool {
 existed := true
 if _, err := os.Stat(filename); os.IsNotExist(err) {
  existed = false
 }
 return existed
}

3. 創(chuàng)建文件夾(如果文件夾不存在則創(chuàng)建)

func MakeDir(dir string) error {
 if !FileIsExisted(dir) {
  if err := os.MkdirAll(dir, 0777); err != nil { //os.ModePerm
   fmt.Println("MakeDir failed:", err)
   return err
  }
 }
 return nil
}

4. 復(fù)制文件

復(fù)制文件過程中一定要注意將原始文件的權(quán)限也要復(fù)制過去,否則可能會導(dǎo)致可執(zhí)行文件不能執(zhí)行等問題。

//使用io.Copy
func CopyFile(src, des string) (written int64, err error) {
 srcFile, err := os.Open(src)
 if err != nil {
  return 0, err
 }
 defer srcFile.Close()
 
 //獲取源文件的權(quán)限
 fi, _ := srcFile.Stat()
 perm := fi.Mode()
 
 //desFile, err := os.Create(des)  //無法復(fù)制源文件的所有權(quán)限
 desFile, err := os.OpenFile(des, os.O_RDWR|os.O_CREATE|os.O_TRUNC, perm)  //復(fù)制源文件的所有權(quán)限
 if err != nil {
  return 0, err
 }
 defer desFile.Close()
 
 return io.Copy(desFile, srcFile)
} 
 
//使用ioutil.WriteFile()和ioutil.ReadFile()
func CopyFile2(src, des string) (written int64, err error) {
 //獲取源文件的權(quán)限
 srcFile, err := os.Open(src)
 if err != nil {
  return 0, err
 }
 fi, _ := srcFile.Stat()
 perm := fi.Mode()
 srcFile.Close()
 
 input, err := ioutil.ReadFile(src)
 if err != nil {
  return 0, err
 }
 
 err = ioutil.WriteFile(des, input, perm)
 if err != nil {
  return 0, err
 }
 
 return int64(len(input)), nil
} 
 
//使用os.Read()和os.Write()
func CopyFile3(src, des string, bufSize int) (written int64, err error) {
 if bufSize = 0 {
  bufSize = 1*1024*1024   //1M
 }
 buf := make([]byte, bufSize)
 
 srcFile, err := os.Open(src)
 if err != nil {
  return 0, err
 }
 defer srcFile.Close()
 
 //獲取源文件的權(quán)限
 fi, _ := srcFile.Stat()
 perm := fi.Mode()
 
 desFile, err := os.OpenFile(des, os.O_CREATE|os.O_RDWR|os.O_TRUNC, perm)
 if err != nil {
  return 0, err
 }
 defer desFile.Close()
 
 count := 0
 for {
  n, err := srcFile.Read(buf)
  if err != nil  err != io.EOF {
   return 0, err
  }
 
  if n == 0 {
   break
  }
 
  if wn, err := desFile.Write(buf[:n]); err != nil {
   return 0, err
  } else {
   count += wn
  }
 }
 
 return int64(count), nil
}

5. 復(fù)制整個(gè)文件夾

func CopyDir(srcPath, desPath string) error {
 //檢查目錄是否正確
 if srcInfo, err := os.Stat(srcPath); err != nil {
  return err
 } else {
  if !srcInfo.IsDir() {
   return errors.New("源路徑不是一個(gè)正確的目錄!")
  }
 }
 
 if desInfo, err := os.Stat(desPath); err != nil {
  return err
 } else {
  if !desInfo.IsDir() {
   return errors.New("目標(biāo)路徑不是一個(gè)正確的目錄!")
  }
 }
 
 if strings.TrimSpace(srcPath) == strings.TrimSpace(desPath) {
  return errors.New("源路徑與目標(biāo)路徑不能相同!")
 }
 
 err := filepath.Walk(srcPath, func(path string, f os.FileInfo, err error) error {
  if f == nil {
   return err
  }
 
  //復(fù)制目錄是將源目錄中的子目錄復(fù)制到目標(biāo)路徑中,不包含源目錄本身
  if path == srcPath {
   return nil
  }
 
  //生成新路徑
  destNewPath := strings.Replace(path, srcPath, desPath, -1)
 
  if !f.IsDir() {
   CopyFile(path, destNewPath)
  } else {
   if !FileIsExisted(destNewPath) {
    return MakeDir(destNewPath)
   }
  }
 
  return nil
 })
 
 return err
}

6. 遍歷指定文件夾中的所有文件(不進(jìn)入下一級子目錄)

/* 獲取指定路徑下的所有文件,只搜索當(dāng)前路徑,不進(jìn)入下一級目錄,可匹配后綴過濾(suffix為空則不過濾)*/
func ListDir(dir, suffix string) (files []string, err error) {
   files = []string{}
 
   _dir, err := ioutil.ReadDir(dir)
   if err != nil {
      return nil, err
   }
 
   suffix = strings.ToLower(suffix)  //匹配后綴
 
   for _, _file := range _dir {
      if _file.IsDir() {
         continue   //忽略目錄
      }
      if len(suffix) == 0 || strings.HasSuffix(strings.ToLower(_file.Name()), suffix) {
         //文件后綴匹配
         files = append(files, path.Join(dir, _file.Name()))
      }
   }
 
   return files, nil
}

7. 遍歷指定路徑及其子目錄中的所有文件

/* 獲取指定路徑下以及所有子目錄下的所有文件,可匹配后綴過濾(suffix為空則不過濾)*/
func WalkDir(dir, suffix string) (files []string, err error) {
 files = []string{} 
 err = filepath.Walk(dir, func(fname string, fi os.FileInfo, err error) error {
  if fi.IsDir() {
   //忽略目錄
   return nil
  }
 
  if len(suffix) == 0 || strings.HasSuffix(strings.ToLower(fi.Name()), suffix) {
   //文件后綴匹配
   files = append(files, fname)
  }
 
  return nil
 })
 
 return files, err
}

8. 刪除文件

os.Remove(filename)

9. 刪除文件夾及其包含的所有子目錄和所有文件

os.RemoveAll(dir)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 解決go build不去vendor下查找包的問題
  • 解決GOPATH在GOLAND中的坑
  • golang 如何刪除二進(jìn)制文件中的源碼路徑信息
  • Golang 刪除文件并遞歸刪除空目錄的操作
  • go run main.go 一直提示找不到包的解決方案

標(biāo)簽:蘭州 湖南 仙桃 黃山 崇左 湘潭 銅川 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang 文件操作:刪除指定的文件方式》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    桃园市| 台湾省| 崇仁县| 大渡口区| 武冈市| 绥芬河市| 廊坊市| 蓬安县| 镇江市| 房山区| 九江县| 绿春县| 称多县| 古田县| 哈巴河县| 太仆寺旗| 漳浦县| 团风县| 大冶市| 洛川县| 达拉特旗| 泽州县| 高邮市| 怀仁县| 上虞市| 金乡县| 屏南县| 陈巴尔虎旗| 星子县| 贵南县| 原阳县| 诸暨市| 望谟县| 金坛市| 犍为县| 新昌县| 周至县| 沁源县| 泸溪县| 渭源县| 榆林市|