Program.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // Copyright (c) 2012-2020 fo-dicom contributors.
  2. // Licensed under the Microsoft Public License (MS-PL).
  3. using System;
  4. using System.IO;
  5. namespace Dicom.Media
  6. {
  7. internal static class Program
  8. {
  9. private static void Main(string[] args)
  10. {
  11. try
  12. {
  13. if (args.Length < 2)
  14. {
  15. PrintUsage();
  16. return;
  17. }
  18. var action = args[0];
  19. var path = args[1];
  20. if (action == "read")
  21. {
  22. path = Path.Combine(path, "DICOMDIR");
  23. if (!File.Exists(path))
  24. {
  25. Console.WriteLine("DICOMDIR file not found: {0}", path);
  26. return;
  27. }
  28. ReadMedia(path);
  29. return;
  30. }
  31. WriteMedia(path);
  32. }
  33. catch (Exception ex)
  34. {
  35. Console.WriteLine(ex.Message);
  36. }
  37. }
  38. private static void WriteMedia(string path)
  39. {
  40. var dicomDirPath = Path.Combine(path, "DICOMDIR");
  41. var dirInfo = new DirectoryInfo(path);
  42. var dicomDir = new DicomDirectory();
  43. foreach (var file in dirInfo.GetFiles("*.*", SearchOption.AllDirectories))
  44. {
  45. var dicomFile = Dicom.DicomFile.Open(file.FullName);
  46. dicomDir.AddFile(dicomFile, string.Format(@"000001\{0}", file.Name));
  47. }
  48. dicomDir.Save(dicomDirPath);
  49. }
  50. private static void ReadMedia(string fileName)
  51. {
  52. var dicomDirectory = DicomDirectory.Open(fileName);
  53. foreach (var patientRecord in dicomDirectory.RootDirectoryRecordCollection)
  54. {
  55. Console.WriteLine(
  56. "Patient: {0} ({1})",
  57. patientRecord.GetSingleValue<string>(DicomTag.PatientName),
  58. patientRecord.GetSingleValue<string>(DicomTag.PatientID));
  59. foreach (var studyRecord in patientRecord.LowerLevelDirectoryRecordCollection)
  60. {
  61. Console.WriteLine("\tStudy: {0}", studyRecord.GetSingleValue<string>(DicomTag.StudyInstanceUID));
  62. foreach (var seriesRecord in studyRecord.LowerLevelDirectoryRecordCollection)
  63. {
  64. Console.WriteLine("\t\tSeries: {0}", seriesRecord.GetSingleValue<string>(DicomTag.SeriesInstanceUID));
  65. foreach (var imageRecord in seriesRecord.LowerLevelDirectoryRecordCollection)
  66. {
  67. Console.WriteLine(
  68. "\t\t\tImage: {0} [{1}]",
  69. imageRecord.GetSingleValue<string>(DicomTag.ReferencedSOPInstanceUIDInFile),
  70. imageRecord.GetSingleValue<string>(DicomTag.ReferencedFileID));
  71. }
  72. }
  73. }
  74. }
  75. }
  76. private static void PrintUsage()
  77. {
  78. Console.WriteLine("Usage: Dicom.Media.exe read|write <directory>");
  79. }
  80. }
  81. }