Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用fo Dicom修改Dicom标记_C#_Console_Fo Dicom - Fatal编程技术网

C# 如何使用fo Dicom修改Dicom标记

C# 如何使用fo Dicom修改Dicom标记,c#,console,fo-dicom,C#,Console,Fo Dicom,我正在创建一个控制台应用程序,它将修改dicom标记。我将加载一个dicom文件并更新PatientID标签 我似乎无法得到任何修改。我能够阅读标签,但更新/添加似乎对我不起作用。以前我在powershell上使用过DICOM工具包,它非常简单明了,但我想开始用c#开发,但到目前为止我失败了 使用系统; 使用System.IO; 使用spiromicImporterPrep.FileMethods; 使用Dicom; 命名空间SpiromicsImporterPrep { 班级计划 { 静态vo

我正在创建一个控制台应用程序,它将修改dicom标记。我将加载一个dicom文件并更新PatientID标签

我似乎无法得到任何修改。我能够阅读标签,但更新/添加似乎对我不起作用。以前我在powershell上使用过DICOM工具包,它非常简单明了,但我想开始用c#开发,但到目前为止我失败了

使用系统;
使用System.IO;
使用spiromicImporterPrep.FileMethods;
使用Dicom;
命名空间SpiromicsImporterPrep
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串文件名=@“Z:\SPIROMICS\Human\u Scans\Dispatch\u Received\NO\u BACKUP\u DONE\u HERE\MIFAR\FORCE\JH114062-FU4\119755500\Non\u Con\u FRC\u 0.75\u Qr40\u 5\u 7094\IM001139”;
var file=DicomFile.Open(文件名,readOption:FileReadOption.ReadAll);
var dicomdaset=file.Dataset;
dicomDataset.AddOrUpdate(DicomTag.PatientID,“测试患者”);
}
}
}

运行代码后,当我使用ImageJ或和其他Dicom读取器查看此文件的Dicom头标记时,我希望PatientID标记的值为“TEST-PATIENT”。代码运行时没有错误,但在查看Dicom头时,似乎没有更新或更改任何内容。

您应该调用DicomFile.Save()方法

string[]files=System.IO.Directory.GetFiles(@“D:\AcquiredImages\20191107\1.2.826.0.1.3680043.2.461.11107149.32666627937\1.2.276.0.7230010.3.1.3.3632557514.6848.1573106796.739”);
foreach(文件中的var项)
{
DicomFile DicomFile=DicomFile.Open(item,FileReadOption.ReadAll);
dicomFile.Dataset.AddOrUpdate(DicomTag.PatientName,“abc”);
保存(项);
}

FileReadOption.ReadAll是必需的。

DicomFile.Open()
将文件加载到内存中,您可以在内存中对其进行操作,但如果要更新磁盘上的文件,则需要调用
保存()
方法。多亏了这个,Save方法是我所缺少的,您还解决了我修改数据集中所有dicom而不是一个文件的问题。你知道加快速度的方法吗?我工作,但相当慢。
            string[] files = System.IO.Directory.GetFiles(@"D:\AcquiredImages\20191107\1.2.826.0.1.3680043.2.461.11107149.3266627937\1.2.276.0.7230010.3.1.3.3632557514.6848.1573106796.739");

            foreach (var item in files)
            {
                DicomFile dicomFile = DicomFile.Open(item,FileReadOption.ReadAll);             

                dicomFile.Dataset.AddOrUpdate<string>(DicomTag.PatientName, "abc");

                dicomFile.Save(item);
            }