Я написал метод расширения для класса System.IO.FileInfo
для создания жесткой ссылки, и он выглядит следующим образом:
[DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]
private static extern bool CreateHardLink(string lpFileName, string lpExistingFileName, IntPtr lpSecurityAttributes);
public static void CreateHardLink(this FileInfo file, string destination) {
CreateHardLink(destination, file.FullName, IntPtr.Zero);
}
// Usage:
fileInfo.CreateHardLink(@".\hardLinkCopy.txt");
Метод работает нормально, но я хотел бы сделать несколько модульных тестов только ради этого. Итак, как я могу утверждать, что файл x и другой файл y связаны с одними и теми же данными?
Я придумал несколько способов проверить это:
- Проверьте, согласуются ли данные во всех изменениях. Поскольку создание копии с жесткой ссылкой — это просто присвоение второму имени файлу, любые изменения, внесенные в первый экземпляр, будут отражены во втором, и наоборот. . Если данные между двумя файлами остаются согласованными, несмотря на изменения, можно с уверенностью предположить, что эти файлы жестко связаны с одними и теми же данными.
- Утверждайте, что создание жесткой ссылки не влияет на размер родительской папки. Поскольку копия с жесткой ссылкой не копирует данные на диск, родительский каталог не должен становиться тяжелее. Если при вызове метода создается новый файл с тем же содержимым, что и исходный файл, а родительская папка не изменилась в размере (или увеличилась меньше, чем обычная копия), новый файл должен быть жестко копия ссылки.
Однако эти методы пахнут. Где-то в ОС должен быть хотя бы один встроенный метод, чтобы проверить, указывают ли два файла на одни и те же данные на диске!
Кто-нибудь может поделиться наводкой?