我有一個包含檔案的檔案夾,但并非所有檔案都是 DICOM 檔案,我需要識別哪個是 DICOM。
我的第一個決定是創建 foreach 回圈來檢查擴展:
foreach (var item in fileList.Where(x => x.Extension == ".dcm"))
{
}
但并非所有人都有“.dcm”,其中一些沒有,但它們是 DICOM。
我正在使用 fo-dicom nuget 包,但沒有在那里找到答案。
我的問題是:如何檢查 DICOM 的所有檔案?
我知道 Dicom 檔案有 128 個位元組可用,然后是“DICM”的最后 4 個位元組,但是我如何檢查呢?
uj5u.com熱心網友回復:
如果您使用的是 fo-dicom,那么您可以使用DicomFile.HasValidHeader(filename)回傳 true 或 false的內置方法。
此方法會檢查那些魔術位元組,但也會檢查舊版本的 dicom,其中 128 位元組不存在。
uj5u.com熱心網友回復:
您可以跳過檔案的前 128 個位元組并讀取接下來的 4 個位元組并將它們與“DICM”的 ASCII 代碼進行比較,例如:
byte[] dicomPrefix = new byte[4];
byte[] expectedPrefix = "DICM".Select(c => (byte)c).ToArray();
using (var file = File.OpenRead("your filepath here"))
{
if (file.Length >= 132)
{
file.Position = 128; // Skip first 128 bytes.
file.Read(dicomPrefix, 0, dicomPrefix.Length);
if (dicomPrefix.SequenceEqual(expectedPrefix))
{
// It's a DICOM file.
}
}
}
uj5u.com熱心網友回復:
謝謝你的回答!
我想我為我的問題找到了解決方案:
foreach (FileInfo f in fileList)
{
bool isDicom = DicomFile.HasValidHeader(f.FullName);
if (isDicom)
{
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311459.html
