System.IO.Abstractions
System.IO.Abstractions copied to clipboard
Incorrect LastAccessTime & LastWriteTime for directory
Describe the bug Mock file system is not storing LastAccessTime & LastWriteTime properties for directories
To Reproduce
var fileSystem = new MockFileSystem();
var info = fileSystem.DirectoryInfo.FromDirectoryName(@"C:\\Parent\\Dir");
info.Create();
info.LastWriteTime = new DateTime(2001, 2, 3);
var c= fileSystem.DirectoryInfo.FromDirectoryName("C:\\Parent");
foreach (var info in parent.EnumerateDirectories()) {
var thisShouldBeTrue = info.LastAccessTime == new DateTime(2001, 2, 3);
}
Expected behavior
variable thisShouldBeTrue
should be true.
Additional context
class MockFileSystem
should have method AddDirectory(string path, MockDirectoryInfo mock)
so i can set directory attributes same way as in method AddFile
. MockDirectoryInfo
is derived from MockFileInfo
but with no content (only default ctor) and with attribute FileAttributes.Directory.
Sounds useful, maybe @siprbaum you also have an opinion here 😀
First, let me adress thispart:
Additional context class
MockFileSystem
should have methodAddDirectory(string path, MockDirectoryInfo mock)
so i can set directory attributes same way as in methodAddFile
.MockDirectoryInfo
is derived fromMockFileInfo
but with no content (only default ctor) and with attribute FileAttributes.Directory.
I think you meant MockDirectoryInfo
-> MockDirectoryData
and MockFileInfo
-> MockFileData
.
Adding a method
AddDirectory(string path, MockDirectoryData mock)
^^^^ ...Data not ...Info
could be useful, I believe.
Concerning the automatic LastAccessTime update when enumerating the directroy:
var fileSystem = new MockFileSystem(); var info = fileSystem.DirectoryInfo.FromDirectoryName(@"C:\\Parent\\Dir"); info.Create(); info.LastWriteTime = new DateTime(2001, 2, 3); var c= fileSystem.DirectoryInfo.FromDirectoryName("C:\\Parent"); foreach (var info in parent.EnumerateDirectories()) { var thisShouldBeTrue = info.LastAccessTime == new DateTime(2001, 2, 3); }
Expected behavior variable
thisShouldBeTrue
should be true.
Isn't this also depending on the underlying OS, e.g Linux vs Windows if and when the xxxTimes are updated? But I have to admit I haven't looked to deeply into it.
So at least this second part sounds more controversial than the first part to me.