Функция 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,
которая проверяет, существует ли файл