DiskImage.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using static DiskAccessLibrary.Mod.Consts;
  5. namespace DiskAccessLibrary
  6. {
  7. public abstract partial class DiskImage
  8. {
  9. public static string GetDiskImageInfo(string path)
  10. {
  11. if (path == null) throw new ArgumentNullException(nameof(path));
  12. var info = new StringBuilder();
  13. if (false == File.Exists(path))
  14. {
  15. info.AppendLine("** File not found **");
  16. }
  17. else
  18. {
  19. var extension = System.IO.Path.GetExtension(path).ToLower();
  20. switch (extension)
  21. {
  22. default:
  23. info.AppendLine($"No info for extension {extension}");
  24. break;
  25. case ".img":
  26. var rawLength = new FileInfo(path).Length;
  27. info.AppendLine("Raw Disk Image");
  28. info.AppendLine($"Size: {rawLength / MegaByte:N0} MB");
  29. break;
  30. case ".bdd":
  31. info.AppendLine("Block Differencing Disk Image");
  32. var bdd = new BddInfo(path, false);
  33. if (null == bdd.BasedImagePath)
  34. {
  35. info.AppendLine("** No Base Image Mode **");
  36. }
  37. else
  38. {
  39. if (false == File.Exists(bdd.BasedImagePath))
  40. {
  41. info.AppendLine("** Based image file not found **");
  42. info.AppendLine($"Based on: {bdd.BasedImagePath}");
  43. break;
  44. }
  45. long baseLength;
  46. using (var fs = new FileStream(bdd.BasedImagePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
  47. baseLength = fs.Length;
  48. info.AppendLine($"Based on: {bdd.BasedImagePath}");
  49. info.AppendLine($"Based Size: {baseLength / MegaByte:N0} MB");
  50. if (baseLength != bdd.Length)
  51. {
  52. info.AppendLine("** Fully Size not match to base **");
  53. break;
  54. }
  55. }
  56. info.AppendLine($"Block Size: {bdd.BlockSize / KiloByte:N0} KB");
  57. info.AppendLine($"Block Count: {bdd.NumberOfBlocks:N0}");
  58. info.AppendLine($"Fully Size: {bdd.Length / MegaByte:N0} MB");
  59. break;
  60. }
  61. }
  62. return info.ToString();
  63. }
  64. }
  65. }