private void CopyFile(string srcName, string dstName, PC98FatFileSystem srcFat, FatFileSystem dstFat) { using (var src = srcFat.OpenFile(srcName, FileMode.Open)) { MakeDirectory(dstName, dstFat); if (dstFat.FileExists(dstName)) { Debug.WriteLine("exists"); //dstFat.DeleteFile(dstName); } var tmpfile = "~copy.tmp"; if (dstFat.FileExists(tmpfile)) { dstFat.DeleteFile(tmpfile); } using (var dst = dstFat.OpenFile(tmpfile, FileMode.Create)) { src.CopyTo(dst); } dstFat.MoveFile(tmpfile, dstName, true); var fi = dstFat.GetFileInfo(dstName); fi.LastWriteTime = DateTime.Now; fi.LastAccessTime = DateTime.Now; /*try { * dstFat.MoveFile(tmpfile, dstName, true); * var fi = dstFat.GetFileInfo(dstName); * fi.LastWriteTime = DateTime.Now; * } catch (Exception e) { * Debug.WriteLine(dstName); * }*/ } }
public void ReadFatFilesystemTest(string path) { using (Stream developerDiskImageStream = File.OpenRead(path)) using (var disk = new Disk(developerDiskImageStream, Ownership.None)) { // Find the first (and supposedly, only, FAT partition) var volumes = VolumeManager.GetPhysicalVolumes(disk); foreach (var volume in volumes) { var fileSystems = FileSystemManager.DetectFileSystems(volume); var fileSystem = Assert.Single(fileSystems); Assert.Equal("FAT", fileSystem.Name); using (FatFileSystem fat = (FatFileSystem)fileSystem.Open(volume)) { Assert.True(fat.FileExists("hello.txt")); using (Stream helloStream = fat.OpenFile("hello.txt", FileMode.Open, FileAccess.Read)) using (MemoryStream copyStream = new MemoryStream()) { Assert.NotEqual(0, helloStream.Length); helloStream.CopyTo(copyStream); Assert.Equal(helloStream.Length, copyStream.Length); Assert.Equal("Hello, World!\n", Encoding.UTF8.GetString(copyStream.ToArray())); } } } } }
private void CheckConfigFiles(PatchContainer patchResult) { var files = new string[] { @"\AUTOEXEC.BAT", @"\CONFIG.SYS" }; foreach (var file in files) { var fileInfo = new PatchedFile(); fileInfo.Name = file; fileInfo.Action = PatchAction.Copy; if (originalFs.FileExists(file) && translatedFs.FileExists(file)) { using (var origFh = originalFs.OpenFile(file, FileMode.Open)) { using (var translatedFh = translatedFs.OpenFile(file, FileMode.Open)) { var origMd5 = Md5sum(origFh); var translatedMd5 = Md5sum(translatedFh); if (origMd5 != translatedMd5) { var useOriginal = form.AskConfigFileSource(file); if (useOriginal) { origFh.Position = 0; fileInfo.FileData = DumpStream(origFh); patchResult.TotalSize += origFh.Length; } else { translatedFh.Position = 0; fileInfo.FileData = DumpStream(translatedFh); patchResult.TotalSize += translatedFh.Length; } } else { origFh.Position = 0; fileInfo.FileData = DumpStream(origFh); patchResult.TotalSize += origFh.Length; } } } } else if (originalFs.FileExists(file)) { using (var origFh = originalFs.OpenFile(file, FileMode.Open)) { fileInfo.FileData = DumpStream(origFh); patchResult.TotalSize += origFh.Length; } } else if (translatedFs.FileExists(file)) { using (var translatedFh = translatedFs.OpenFile(file, FileMode.Open)) { fileInfo.FileData = DumpStream(translatedFh); patchResult.TotalSize += translatedFh.Length; } } else { continue; } patchResult.Add(fileInfo); } }