### 文件基本操作
| 權限 | 權限數值 | 作業 |
| --- | --- | --- |
| r | 4 | read,讀取。讀取文件內容,瀏覽目錄 |
| w | 2 | write,寫入。新增或者修改內容,刪除移動目錄或者目錄里面文件 |
| x | 1 | execute,執行。執行文件,進入目錄 |
### 文件的創創建與打開
> func OpenFile(name string, flag int, perm FileMode) ,返回(file *File, err error)
> name string 路徑
> flag int 指定的文件訪問模式
> perm FileMode 位掩碼參數,文件模式和權限,如0776
>
OpenFile是一個更底層的文件打開函數,大多數調用者都應用Open或Create代替本函數。它會使用指定的選項(如O_RDONLY等)、指定的模式(如0666等)打開指定名稱的文件。如果操作成功,返回的文件對象可用于/O。如果出錯,錯誤底層類型是*PathError。
```
// flag指定的文件訪問模式 os中的常量 并非所有操作系統兼容
const (
O_RDONLY int = syscall.O_RDONLY // 只讀模式打開文件
O_WRONLY int = syscall.O_WRONLY //只寫模式打開文件
O_RDWR int = syscall.O_RDWR //讀寫模式打開文件
O_APPEND int = syscall.O_APPEND //寫操數據加文件尾部
O_CREATE int = syscall.O_CREAT //如果不存在將創建一個新文件
O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必須不存在
O_SYNC int = syscall.O_SYNC //打開文件用于同步I/0
O_TRUNC int = syscall.O_TRUNC // 如果可能,打開時清空文件
)
```
其中,O_RDONLY、O_WRONLY、O_RDWR應該只指定一個,剩下的通過“|”操作符來指定。該函數內部會給flags加上syscall.O_CLOEXEC,在fork子進程時會關閉通過OpenFile打開的文件,即子進程不會重用該文件描述符。
```
// perm 位掩碼參數指定的常量 類型是 os.FileMode
const(
// 單字被 string 方法用于格式化的屬性縮寫
ModeDir FileMode = 1 << (32-1-iota) //d : 目錄
ModeAppend // a:只能寫人,且只能寫入到末尾
ModeExclusive //1:用于執行
ModeTemporary // T:1 臨時文件(非備份文件)
ModeSymlink //L:符號鏈接(不是快捷方式文件)
ModeDevice //D:設備
ModeNamedPipe //p:命名管道(FIFO)
ModeSocket //S:Unix域socket
ModeSetuid // u:表示文件具有其創建者戶id權限
ModeSetgid //g:表示文件具有其創建者組id的權限
ModeCharDevice //c:字設備,需已設置ModeDevice
ModeSticky //t:只有root/創建者能刪除/移動文件
//覆蓋所有類型位(用于通過&獲取類型位),對普通文件,所有這些位都不應被設置
ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice
ModePerm FileMode= 0777 // 覆蓋所有Unix權限位(用于通過&獲取類型位)
)
```
```
package main
import (
"fmt"
"os"
)
//打開文件 如果沒有文件 就創建
func mode(path string, fiag int) {
file, err := os.OpenFile(path, fiag, 0766)
if err != nil {
// 錯誤輸出 正常錯誤輸出應該是空的
fmt.Println(err)
}
// 成功了 打印出指針地址
fmt.Println(file)
// &{0xc00010e780}
// 創建成功關閉文件
file.Close()
}
//打開文件 如果沒有文件 就創建
func main() {
// os.O_RDWR|os.O_CREATE 表示讀寫方式打開文件 如果不存在就創立
mode("E:\\flie\\999.txt", os.O_RDWR|os.O_CREATE)
}
```
大多數情況下我們用下面兩個函數來創建或者打開文件
> func Open(name string) , 返回(file *File, err error)
> name string 路徑
>
Open打開一個文件用于讀取。如果操作成功,返回的文件對象的方法可用于讀取數據;對應的文件描述符具有O_RDONLY模式。如果出錯,錯誤底層類型是*PathError。
> func Create(name string) , 返回(file *File, err error)
> name string 路徑
Create采用模式0666(任何人都可讀寫,不可執行)創建一個名為name的文件,如果文件已存在就會截斷它(為空文件)。如果成功,返回的文件對象可用于I/O;對應的文件描述符具有O_RDWR模式。如果出錯,錯誤底層類型是*PathError。
Open和Create的函數定義如下:
```
func Open(name string) (*File, error){
return OpenFile(name,O_RDONLY, 0)
}
func Create(name string) (*File, error){
return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
}
```
- 安裝開發環境
- 安裝開發環境
- 安裝詳細教程
- 引入包
- Go語言基礎
- 基本變量與數據類型
- 變量
- 數據類型
- 指針
- 字符串
- 代碼總結
- 常量與運算符
- 常量
- 運算符
- 流程控制
- if判斷
- for循環
- switch分支
- goto跳轉
- 斐波那契數列
- Go語言內置容器
- 數組
- 切片
- 映射
- 函數
- 函數(上)
- 函數(中)
- 函數(下)
- 小節
- 包管理
- 結構體
- 結構體(上)
- 結構體(中)
- 結構體(下)
- 小節
- 錯誤處理
- 錯誤處理
- 宕機
- 錯誤應用
- 小節
- 文件操作
- 獲取目錄
- 創建和刪除目錄
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 處理JSON文件
- 接口與類型
- 接口的創建與實現
- 接口賦值
- 接口嵌入
- 空接口
- 類型斷言(1)
- 類型斷言(2)
- 小節
- 并發與通道
- goroutine協程
- runtime包
- 通道channel
- 單向通道channel
- select
- 線程同步
- 多線程的深入學習
- http編程
- http簡介
- Client和Request
- get請求
- post請求
- 模塊函數方法
- 模塊
- fmt庫,模塊
- 項目練習
- 爬蟲:高三網
- 爬蟲:快代理
- 爬蟲:快代理2
- 多線程:通道思路
- 多線程爬蟲:快代理