Константа os.O_APPEND
Константа os.O_APPEND предназначена для открытия файла в режиме дозаписи.
При использовании этого флага все данные, записываемые в файл, будут добавляться
в его конец, независимо от текущей позиции указателя в файле.
Это гарантирует, что существующее содержимое файла не будет перезаписано.
Константа применяется совместно с функцией os.OpenFile,
где она передается в качестве одного из флагов.
Синтаксис
os.O_APPEND
Пример использования с os.OpenFile
В следующем примере мы открываем файл для дозаписи.
Если файл не существует, он будет создан (благодаря флагу os.O_CREATE).
Затем мы записываем в него две строки.
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("example.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
_, err = file.WriteString("Первая запись\n")
if err != nil {
fmt.Println("Error:", err)
return
}
_, err = file.WriteString("Вторая запись\n")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Данные успешно добавлены в файл")
}
Результат выполнения кода:
"Данные успешно добавлены в файл"
Пример дозаписи в существующий файл
Предположим, что у нас уже есть файл с содержимым "Hello, World!".
Откроем его с флагом os.O_APPEND и добавим еще одну строку.
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("data.txt", os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
_, err = file.WriteString("Добавленная строка\n")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Строка добавлена в конец файла")
}
Результат выполнения кода:
"Строка добавлена в конец файла"
Пример: попытка записи в начало файла с os.O_APPEND
Даже если мы попытаемся переместить указатель файла в начало с помощью file.Seek,
запись все равно произойдет в конец файла, благодаря флагу os.O_APPEND.
Это демонстрирует, что флаг имеет приоритет над позицией указателя.
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("append_test.txt", os.O_APPEND|os.O_CREATE|os.O_RDWR, 0644)
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
// Перемещаем указатель в начало файла
_, err = file.Seek(0, 0)
if err != nil {
fmt.Println("Error:", err)
return
}
// Запись все равно произойдет в конец
_, err = file.WriteString("Эта строка будет в конце\n")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Запись выполнена в конец файла")
}
Результат выполнения кода:
"Запись выполнена в конец файла"
Смотрите также
-
константу
os.O_CREATE,
которая создает файл, если он не существует -
константу
os.O_RDWR,
которая открывает файл для чтения и записи -
функцию
os.OpenFile,
которая открывает файл с указанными флагами -
метод
os.File.WriteString,
который записывает строку в файл