Тип os.File
Тип os.File представляет собой файловый дескриптор
для открытого файла. Он используется для выполнения
всех операций ввода-вывода с файлами: чтения, записи,
позиционирования, синхронизации и получения информации
о файле. Объект типа os.File возвращается
такими функциями, как os.Open, os.Create,
os.OpenFile. После завершения работы с файлом
его необходимо закрывать с помощью метода
Close, чтобы освободить системные ресурсы.
Создание файла и запись данных
Для создания файла используется функция os.Create,
которая возвращает указатель на тип os.File.
Давайте создадим файл и запишем в него строку:
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Create("example.txt")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer file.Close()
n, err := file.WriteString("Hello, World!")
if err != nil {
fmt.Println("Error writing to file:", err)
return
}
fmt.Printf("Written %d bytes to file\n", n)
}
Результат выполнения кода:
"Written 13 bytes to file"
Чтение данных из файла
Для чтения данных из файла используется метод
Read, который считывает данные в байтовый слайс.
Давайте откроем существующий файл и прочитаем его
содержимое:
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
buffer := make([]byte, 1024)
n, err := file.Read(buffer)
if err != nil {
fmt.Println("Error reading from file:", err)
return
}
fmt.Printf("Read %d bytes: %s\n", n, string(buffer[:n]))
}
Результат выполнения кода:
"Read 13 bytes: Hello, World!"
Получение информации о файле
Метод Stat возвращает информацию о файле,
включая его размер, права доступа и время модификации.
Давайте получим информацию о файле:
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
info, err := file.Stat()
if err != nil {
fmt.Println("Error getting file info:", err)
return
}
fmt.Printf("File name: %s\n", info.Name())
fmt.Printf("File size: %d bytes\n", info.Size())
fmt.Printf("Is directory: %t\n", info.IsDir())
fmt.Printf("Permissions: %s\n", info.Mode())
}
Результат выполнения кода:
"File name: example.txt"
"File size: 13 bytes"
"Is directory: false"
"Permissions: -rw-r--r--"
Позиционирование в файле
Метод Seek позволяет перемещать текущую позицию
в файле. Это полезно для чтения и записи с определенного
места. Давайте прочитаем данные начиная с пятого символа:
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// Перемещаем указатель на 5 байт от начала файла
_, err = file.Seek(5, 0)
if err != nil {
fmt.Println("Error seeking in file:", err)
return
}
buffer := make([]byte, 1024)
n, err := file.Read(buffer)
if err != nil {
fmt.Println("Error reading from file:", err)
return
}
fmt.Printf("Read from position 5: %s\n", string(buffer[:n]))
}
Результат выполнения кода:
"Read from position 5: , World!"
Смотрите также
-
функцию
os.Open,
которая открывает файл только для чтения -
функцию
os.Create,
которая создает файл для записи -
метод
os.File.Close,
который закрывает файловый дескриптор -
метод
os.File.Stat,
который получает информацию о файле