РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
540 of 1593 menu

Константа os.O_EXCL

Константа os.O_EXCL используется при открытии файла вместе с флагом os.O_CREATE. Она гарантирует, что файл будет создан только в том случае, если он не существует. Если файл с указанным именем уже присутствует в системе, вызов вернет ошибку. Это особенно полезно для предотвращения случайной перезаписи существующих файлов, когда требуется создать новый уникальный файл.

Синтаксис

os.OpenFile(name, os.O_CREATE|os.O_EXCL|os.O_WRONLY, perm)

Пример

Попробуем создать новый файл, которого еще не существует:

package main import ( "fmt" "os" ) func main() { file, err := os.OpenFile("newfile.txt", os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0644) if err != nil { fmt.Println("Error:", err) return } defer file.Close() file.WriteString("Hello, World!") fmt.Println("File created successfully") }

Результат выполнения кода:

"File created successfully"

Пример

Попробуем создать файл, который уже существует. В этом случае мы получим ошибку:

package main import ( "fmt" "os" ) func main() { // Сначала создадим файл file1, err := os.Create("existing.txt") if err != nil { fmt.Println("Error creating file:", err) return } file1.Close() // Теперь попытаемся создать его снова с флагом O_EXCL file2, err := os.OpenFile("existing.txt", os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0644) if err != nil { fmt.Println("Error:", err) return } defer file2.Close() fmt.Println("File created successfully") }

Результат выполнения кода:

"Error: open existing.txt: file exists"

Пример

Используем os.O_EXCL для атомарного создания файла при записи данных. Если файл уже существует, мы не перезаписываем его и выводим соответствующее сообщение:

package main import ( "fmt" "os" ) func main() { filename := "data.txt" file, err := os.OpenFile(filename, os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0644) if err != nil { if os.IsExist(err) { fmt.Println("File already exists, skipping creation") } else { fmt.Println("Error:", err) } return } defer file.Close() file.WriteString("Important data") fmt.Println("File created and data written") }

Результат выполнения кода (при наличии файла):

"File already exists, skipping creation"

Смотрите также

  • константу os.O_CREATE,
    которая указывает на необходимость создания файла
  • константу os.O_TRUNC,
    которая очищает содержимое файла при открытии
  • константу os.O_APPEND,
    которая добавляет данные в конец файла
  • функцию os.OpenFile,
    которая открывает файл с указанными флагами и правами доступа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить