12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- using System;
- using System.IO;
- using System.Text;
- using static DiskAccessLibrary.Mod.Consts;
- namespace DiskAccessLibrary
- {
- public abstract partial class DiskImage
- {
- public static string GetDiskImageInfo(string path)
- {
- if (path == null) throw new ArgumentNullException(nameof(path));
- var info = new StringBuilder();
- if (false == File.Exists(path))
- {
- info.AppendLine("** File not found **");
- }
- else
- {
- var extension = System.IO.Path.GetExtension(path).ToLower();
- switch (extension)
- {
- default:
- info.AppendLine($"No info for extension {extension}");
- break;
- case ".img":
- var rawLength = new FileInfo(path).Length;
- info.AppendLine("Raw Disk Image");
- info.AppendLine($"Size: {rawLength / MegaByte:N0} MB");
- break;
- case ".bdd":
- info.AppendLine("Block Differencing Disk Image");
- var bdd = new BddInfo(path, false);
- if (null == bdd.BasedImagePath)
- {
- info.AppendLine("** No Base Image Mode **");
- }
- else
- {
- if (false == File.Exists(bdd.BasedImagePath))
- {
- info.AppendLine("** Based image file not found **");
- info.AppendLine($"Based on: {bdd.BasedImagePath}");
- break;
- }
- long baseLength;
- using (var fs = new FileStream(bdd.BasedImagePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
- baseLength = fs.Length;
- info.AppendLine($"Based on: {bdd.BasedImagePath}");
- info.AppendLine($"Based Size: {baseLength / MegaByte:N0} MB");
- if (baseLength != bdd.Length)
- {
- info.AppendLine("** Fully Size not match to base **");
- break;
- }
- }
- info.AppendLine($"Block Size: {bdd.BlockSize / KiloByte:N0} KB");
- info.AppendLine($"Block Count: {bdd.NumberOfBlocks:N0}");
- info.AppendLine($"Fully Size: {bdd.Length / MegaByte:N0} MB");
- break;
- }
- }
- return info.ToString();
- }
- }
- }
|