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

Функция os.SameFile

Функция os.SameFile проверяет, ссылаются ли два переданных ей файловых дескриптора на один и тот же базовый файл. Она возвращает true, если оба дескриптора указывают на один и тот же файл, и false в противном случае. Первым параметром функция принимает файловую информацию os.FileInfo, полученную от первого файла, вторым параметром - файловую информацию, полученную от второго файла.

Синтаксис

os.SameFile(fi1, fi2 os.FileInfo) bool

Пример

Давайте проверим, указывают ли два дескриптора на один и тот же файл:

package main import ( "fmt" "os" ) func main() { // Получаем информацию о файле из разных источников file1, err := os.Open("example.txt") if err != nil { fmt.Println("Error opening file1:", err) return } defer file1.Close() file2, err := os.Open("example.txt") if err != nil { fmt.Println("Error opening file2:", err) return } defer file2.Close() // Получаем информацию о каждом файле fi1, err := file1.Stat() if err != nil { fmt.Println("Error getting file1 info:", err) return } fi2, err := file2.Stat() if err != nil { fmt.Println("Error getting file2 info:", err) return } // Проверяем, указывают ли они на один и тот же файл res := os.SameFile(fi1, fi2) fmt.Println(res) }

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

true

Пример

Давайте проверим два разных файла с одинаковым содержимым:

package main import ( "fmt" "os" ) func main() { // Создаем два разных файла с одинаковым содержимым file1, err := os.Create("file1.txt") if err != nil { fmt.Println("Error creating file1:", err) return } defer file1.Close() file1.WriteString("Hello, World!") file2, err := os.Create("file2.txt") if err != nil { fmt.Println("Error creating file2:", err) return } defer file2.Close() file2.WriteString("Hello, World!") // Получаем информацию о каждом файле fi1, err := file1.Stat() if err != nil { fmt.Println("Error getting file1 info:", err) return } fi2, err := file2.Stat() if err != nil { fmt.Println("Error getting file2 info:", err) return } // Проверяем, указывают ли они на один и тот же файл res := os.SameFile(fi1, fi2) fmt.Println(res) }

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

false

Пример

Давайте проверим, указывают ли обычный файл и жесткая ссылка на него на один и тот же файл:

package main import ( "fmt" "os" ) func main() { // Создаем файл и жесткую ссылку на него err := os.WriteFile("original.txt", []byte("test content"), 0644) if err != nil { fmt.Println("Error creating original file:", err) return } err = os.Link("original.txt", "hardlink.txt") if err != nil { fmt.Println("Error creating hardlink:", err) return } // Получаем информацию об оригинальном файле и жесткой ссылке fi1, err := os.Stat("original.txt") if err != nil { fmt.Println("Error getting original file info:", err) return } fi2, err := os.Stat("hardlink.txt") if err != nil { fmt.Println("Error getting hardlink info:", err) return } // Проверяем, указывают ли они на один и тот же файл res := os.SameFile(fi1, fi2) fmt.Println(res) }

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

true

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

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