Esempio n. 1
0
        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);
                 * }*/
            }
        }
Esempio n. 2
0
        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()));
                                }
                        }
                    }
                }
        }
Esempio n. 3
0
        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);
            }
        }