Files
build-web-application-with-…/zh-tw/07.5.md
2019-02-26 01:40:54 +08:00

160 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 7.5 檔案操作
在任何計算機裝置中檔案是都是必須的物件而在Web程式設計中,檔案的操作一直是Web程式設計師經常遇到的問題,檔案操作在Web應用中是必須的,非常有用的,我們經常遇到產生檔案目錄,檔案(夾)編輯等操作,現在我把Go中的這些操作做一詳細總結並例項示範如何使用。
## 目錄操作
檔案操作的大多數函式都是在os套件裡面下面列舉了幾個目錄操作的
- func Mkdir(name string, perm FileMode) error
建立名稱為name的目錄許可權設定是perm例如0777
- func MkdirAll(path string, perm FileMode) error
根據path建立多級子目錄例如astaxie/test1/test2。
- func Remove(name string) error
刪除名稱為name的目錄當目錄下有檔案或者其他目錄時會出錯
- func RemoveAll(path string) error
根據path刪除多級子目錄如果path是單個名稱那麼該目錄下的子目錄全部刪除。
下面是示範程式碼:
```Go
package main
import (
"fmt"
"os"
)
func main() {
os.Mkdir("astaxie", 0777)
os.MkdirAll("astaxie/test1/test2", 0777)
err := os.Remove("astaxie")
if err != nil {
fmt.Println(err)
}
os.RemoveAll("astaxie")
}
```
## 檔案操作
### 建立與開啟檔案
新建檔案可以透過如下兩個方法
- func Create(name string) (file *File, err Error)
根據提供的檔名建立新的檔案返回一個檔案物件預設許可權是0666的檔案返回的檔案物件是可讀寫的。
- func NewFile(fd uintptr, name string) *File
根據檔案描述符建立相應的檔案,返回一個檔案物件
透過如下兩個方法來開啟檔案:
- func Open(name string) (file *File, err Error)
該方法開啟一個名稱為name的檔案但是是隻讀方式內部實現其實呼叫了OpenFile。
- func OpenFile(name string, flag int, perm uint32) (file *File, err Error)
開啟名稱為name的檔案flag是開啟的方式只讀、讀寫等perm是許可權
### 寫檔案
寫檔案函式:
- func (file *File) Write(b []byte) (n int, err Error)
寫入byte型別的資訊到檔案
- func (file *File) WriteAt(b []byte, off int64) (n int, err Error)
在指定位置開始寫入byte型別的資訊
- func (file *File) WriteString(s string) (ret int, err Error)
寫入string資訊到檔案
寫檔案的示例程式碼
```Go
package main
import (
"fmt"
"os"
)
func main() {
userFile := "astaxie.txt"
fout, err := os.Create(userFile)
if err != nil {
fmt.Println(userFile, err)
return
}
defer fout.Close()
for i := 0; i < 10; i++ {
fout.WriteString("Just a test!\r\n")
fout.Write([]byte("Just a test!\r\n"))
}
}
```
### 讀檔案
讀檔案函式:
- func (file *File) Read(b []byte) (n int, err Error)
讀取資料到b中
- func (file *File) ReadAt(b []byte, off int64) (n int, err Error)
從off開始讀取資料到b中
讀檔案的示例程式碼:
```Go
package main
import (
"fmt"
"os"
)
func main() {
userFile := "asatxie.txt"
fl, err := os.Open(userFile)
if err != nil {
fmt.Println(userFile, err)
return
}
defer fl.Close()
buf := make([]byte, 1024)
for {
n, _ := fl.Read(buf)
if 0 == n {
break
}
os.Stdout.Write(buf[:n])
}
}
```
### 刪除檔案
Go語言裡面刪除檔案和刪除資料夾是同一個函式
- func Remove(name string) Error
呼叫該函式就可以刪除檔名為name的檔案
## links
* [目錄](<preface.md>)
* 上一節: [範本處理](<07.4.md>)
* 下一節: [字串處理](<07.6.md>)