プロセスにかなりのオーバーヘッドが追加されるため、このタスクにはDICOMリーダーを使用しないことをお勧めします。この場合に完全なDICOMライブラリを使用する唯一の理由は、ファイルのすべての要素を検証し、ファイルが実際にDICOMファイルであることを確認する場合です。
私の最初の提案は、最初にDICOMファイルを識別するためにファイル拡張子(通常は「.DCM」)に依存することです。次に、ファイルが正しい形式でない場合は、ファイルを開こうとしたときにユーザーに通知します。「.DCM」拡張子を使用する他のファイル形式は知りません。
それが受け入れられない場合(ファイルに拡張子がない場合など)、特定のユースケースに必要な最小限の検証のみを行います。DICOMファイルには、常に128バイトのプリアンブルと、それに続く文字「DICM」(引用符なし)が含まれます。プリアンブルには任意の情報を入力できますが、バイト129〜132には常に「DICM」が含まれている必要があります。これが最低限のファイル検証であるため、次のことをお勧めします。
foreach (string el in files_in_folder)
{
bool isDicomFile = false;
using (FileStream fs = new FileStream(el, FileMode.Open))
{
byte[] b = new byte[4];
fs.Read(b, 128, b.Length);
ASCIIEncoding enc = new ASCIIEncoding();
string verification = enc.GetString(b);
if (verification == "DICM")
isDicomFile = true;
fs.Close();
}
if (isDicomFile)
listView1.Items.Add(new ListViewItem(el));
// I would discourage the use of this else, since even
// if only one file in the list fails, the TextBox.Text
// will still be set to "This is not a DICOM file".
else
textBox1.Text = "This is not a DICOM file";
}