Следует иметь в виду одно существенное различие между строкой пути и FileInfo, которое можно обобщить в приведенных ниже тестах:
Информация о файле отражает информацию о файле на момент его создания — ее можно удалить/изменить, а информация о файле не будет отражать это.
[TestMethod]
public void TestFileInfo()
{
var path = @"C:\Users\bjarmuz\Desktop\aybabtu.txt";
File.WriteAllText(path, "All your base are belong to us!");
var file = new FileInfo(path);
Assert.IsTrue(file.Exists);
File.Delete(file.FullName);
Assert.IsTrue(file.Exists);
Assert.IsFalse(File.Exists(file.FullName));
}
[TestMethod]
public void TestFileInfo()
{
var path = @"C:\Users\bjarmuz\Desktop\aybabtu.txt";
File.WriteAllText(path, "All your base are belong to us!");
Thread.Sleep(1000);
var file = new FileInfo(path);
var date = DateTime.UtcNow;
Assert.IsTrue(file.LastWriteTimeUtc< date);
File.WriteAllText(path, "No!");
Assert.IsTrue(File.GetLastWriteTimeUtc(file.FullName)> date);
Assert.IsFalse(file.LastWriteTimeUtc > date);
}
Это может ввести в заблуждение, и если ваш код передает FileInfos вместо строк, вы можете увидеть неверные результаты для таких свойств, как Exists или Last[..]Time, чего не произошло бы, если бы вы использовали методы File.Get[...]().
Однако, с другой стороны, вы также не должны полагаться на метод File.Exists(), потому что файл может быть создан/удален сразу после запуска тестов. Правильный способ для этого - НЕ выполнять эту проверку, а скорее признать, что она может вызвать исключение ввода-вывода (и быть готовым правильно его обработать). Дополнительная информация в этой замечательной статье https://blogs.msdn.microsoft.com/ericlippert/2008/09/10/vexing-exceptions/
Кроме того, существенным преимуществом FileInfo/DirectoryInfo является то, что он защищает ваш метод (и потребителей метода) от этого:
void SaveEntity(Entity theThing, string path)
{
//now, based on the signature, you don't know whether you need file path or directory path
}
//void SaveEntity(Entity theThing, DirectoryInfo path) {}
//void SaveEntity(Entity theThing, FileInfo path) {}
person
Bartosz
schedule
28.07.2018