public ProjectedFileSystemFactAttribute() { var guid = Guid.NewGuid(); var fullPath = Path.Combine(Path.GetTempPath(), "projFS", guid.ToString("N")); Directory.CreateDirectory(fullPath); try { using (var vfs = new SampleVirtualFileSystem(Path.GetTempPath())) { var options = new ProjectedFileSystemStartOptions(); try { vfs.Start(options); } catch (NotSupportedException ex) { Skip = ex.Message; } } } catch { } }
public void Test() { var guid = Guid.NewGuid(); var fullPath = Path.Combine(Path.GetTempPath(), "projFS", guid.ToString("N")); Directory.CreateDirectory(fullPath); using var vfs = new SampleVirtualFileSystem(fullPath); var options = new ProjectedFileSystemStartOptions { UseNegativePathCache = false, Notifications = { new Notification( PRJ_NOTIFY_TYPES.FILE_HANDLE_CLOSED_FILE_DELETED | PRJ_NOTIFY_TYPES.FILE_HANDLE_CLOSED_FILE_MODIFIED | PRJ_NOTIFY_TYPES.FILE_HANDLE_CLOSED_NO_MODIFICATION | PRJ_NOTIFY_TYPES.FILE_OPENED | PRJ_NOTIFY_TYPES.FILE_OVERWRITTEN | PRJ_NOTIFY_TYPES.FILE_PRE_CONVERT_TO_FULL | PRJ_NOTIFY_TYPES.FILE_RENAMED | PRJ_NOTIFY_TYPES.HARDLINK_CREATED | PRJ_NOTIFY_TYPES.NEW_FILE_CREATED | PRJ_NOTIFY_TYPES.PRE_DELETE | PRJ_NOTIFY_TYPES.PRE_RENAME | PRJ_NOTIFY_TYPES.PRE_SET_HARDLINK), }, }; try { vfs.Start(options); } catch (NotSupportedException ex) { Assert.True(false, ex.Message); } // Get content var files = Directory.GetFiles(fullPath); foreach (var result in files) { var fi = new FileInfo(result); var length = fi.Length; } var directories = Directory.GetDirectories(fullPath); Assert.Single(directories); Assert.Equal("folder", Path.GetFileName(directories[0])); // Get unknown file var fi2 = new FileInfo(Path.Combine(fullPath, "unknownfile.txt")); Assert.False(fi2.Exists); Assert.Throws <FileNotFoundException>(() => fi2.Length); // Get file content Assert.Equal(new byte[] { 1 }, File.ReadAllBytes(Path.Combine(fullPath, "a"))); using var stream = File.OpenRead(Path.Combine(fullPath, "b")); Assert.Equal(1, stream.ReadByte()); Assert.Equal(2, stream.ReadByte()); }