func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
このうち、name はファイルのファイル名で、現在のパスで実行されていない場合は特定のパスを追加する必要があります、flag はファイルの処理パラメータであり、int 型であり、具体的な値は次のとおりです。システムによって異なりますが、効果は同じです。
一般的に使用されるフラグ ファイル処理パラメータの一部を以下に示します。
- O_RDONLY: ファイルを読み取り専用モードで開きます。
- O_WRONLY: ファイルを書き込み専用モードで開きます。
- O_RDWR: ファイルを読み取り/書き込みモードで開きます。
- O_APPEND: 書き込み時にファイルの末尾にデータを追加します (追加)。
- O_CREATE: ファイルが存在しない場合は新しいファイルを作成します。
- O_EXCL: O_CREATE と組み合わせて使用すると、ファイルが存在してはなりません。存在しない場合はエラーが返されます。
- O_SYNC: 一連の書き込み操作を実行するときは、毎回、最後の I/O 操作が完了するまで待ってから続行する必要があります。
- O_TRUNC: 可能であれば、ファイルを開くときにファイルを空にします。
【例1】: golang.txtというファイルを新規作成し、その中に「https://it-kiso.com/golang/」を5文記述します。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// 新しいファイルを作成して、"https://it-kiso.com/golang/"を5回書き込む
filePath := "e:/code/golang.txt"
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println("ファイルが開けませんでした", err)
}
// ファイルハンドルをすぐに閉じる
defer file.Close()
// ファイルに書き込むときは、バッファ付きの *Writer を使用する
write := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
write.WriteString("https://it-kiso.com/golang/ \n")
}
// Flush はバッファされたファイルを実際にファイルに書き込む
write.Flush()
}
実行に成功すると、指定したディレクトリに golang.txt ファイルが生成される
【例2】:既存のファイルを開き、元のコンテンツに「ITの基礎」というコンテンツを追加する
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
filePath:= "e:/code/golang.txt"
file, err:= os.OpenFile(filePath、os.O_WRONLY | os.O_APPEND、0666)
if err != nil {
fmt.Println("ファイルを開くことができません", err)
}
//ファイルハンドルをすぐに閉じます
defer file.Close()
//ファイルに書き込む場合は、バッファ付きの*Writerを使用します
write:= bufio.NewWriter(file)
for i:= 0; i <5; i ++ {
write.WriteString("IT基礎\r\n")
}
//Flushは、バッファされたファイルを実際のファイルに書き込みます
write.Flush()
}
【例3】:既存のファイルを開き、元の内容を読み出して端末に表示し、「こんにちは、ITの基本」という5文を追加します。
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
filePath:= "e:/code/golang.txt"
file、err:= os.OpenFile(filePath、os.O_RDWR|os.O_APPEND、0666)
もし err != nil {
fmt.Println("ファイルのオープンに失敗しました", err)
}
//ファイルハンドルを適時クローズする
defer file.Close()
//元のファイルの内容を読み込み、ターミナルに表示
reader := bufio.NewReader(file)
for {
str、err := reader.ReadString('\n')
if err == io.EOF {
break
}
fmt.Print(str)
}
//ファイルへの書き込みには、バッファのある*Writerを使用します
write := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
write.WriteString("こんにちは、IT基礎。\r\n")
}
//Flushは、バッファされたファイルを実際にファイルに書き込みます。
write.Flush()
}
【例 4】: あるファイルの内容を別のファイルにコピーするプログラムを作成します (注: 両方のファイルがすでに存在します)
package main
import (
"fmt"
"io/ioutil"
)
func main() {
file1Path:= "e:/code/golang.txt"
file2Path:= "e:/code/other.txt"
data、err:= ioutil.ReadFile(file1Path)
if err!= nil {
fmt.Printf("ファイルが開けない=%v\n", err)
return
}
err = ioutil.WriteFile(file2Path、data、0666)
if err!= nil {
fmt.Printf("ファイルが開けない=%v\n", err)
}
}