I am facing one serious problem in my application.
I am trying to open dicom image file (.dcm) has size around 400 MB.
But I am getting and unhandy exceptions,
Some time,
{System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at ?readMedia@BASE_SESSION_CLASS@@$$FQAEPAVFILE_DATAS ET_CLASS@@V?$basic_string@DU?$char_traits@D@std@@V ?$allocator@D@2@@std@@W4MEDIA_FILE_CONTENT_TYPE_EN UM@@000_N2@Z(BASE_SESSION_CLASS* , basic_string<char\,std::char_traits<char>\,std::al locator<char> >* , Int32 , basic_string<char\,std::char_traits<char>\,std::al locator<char> >* , basic_string<char\,std::char_traits<char>\,std::al locator<char> >* , basic_string<char\,std::char_traits<char>\,std::al locator<char> >* , Boolean , Boolean )
at Wrappers.MBaseSession.ReadMedia(String pFileName)
at Dvtk.Sessions.Session.ReadFile(String mediaFileName)
at DvtkHighLevelInterface.Dicom.Files.DicomFile.Read( String fullFileName, ScriptSession dvtkScriptSession)
at DvtkHighLevelInterface.Dicom.Files.DicomFile.Read( String fullFileName, String[] definitionFilesFullName)
at _3disytems.DicomAnonymiserLibrary.DicomImageProces sor.ModifyDicomFile(String filePath) in E:\Projects\Working\Dicom Project\DicomEditorLibrary\DicomImageProcessor.cs: line 63}
and Some times
{System.Runtime.InteropServices.SEHException: External component has thrown an exception.
at ?readMedia@BASE_SESSION_CLASS@@$$FQAEPAVFILE_DATAS ET_CLASS@@V?$basic_string@DU?$char_traits@D@std@@V ?$allocator@D@2@@std@@W4MEDIA_FILE_CONTENT_TYPE_EN UM@@000_N2@Z(BASE_SESSION_CLASS* , basic_string<char\,std::char_traits<char>\,std::al locator<char> >* , Int32 , basic_string<char\,std::char_traits<char>\,std::al locator<char> >* , basic_string<char\,std::char_traits<char>\,std::al locator<char> >* , basic_string<char\,std::char_traits<char>\,std::al locator<char> >* , Boolean , Boolean )
at Wrappers.MBaseSession.ReadMedia(String pFileName)
at Dvtk.Sessions.Session.ReadFile(String mediaFileName)
at DvtkHighLevelInterface.Dicom.Files.DicomFile.Read( String fullFileName, ScriptSession dvtkScriptSession)
at DvtkHighLevelInterface.Dicom.Files.DicomFile.Read( String fullFileName, String[] definitionFilesFullName)
at _3disytems.DicomAnonymiserLibrary.DicomImageProces sor.ModifyDicomFile(String filePath) in E:\Projects\Working\Dicom Project\DicomEditorLibrary\DicomImageProcessor.cs: line 63}
These exception not getting for every files, only for large files when I am trying to read them.
I am using DVTK Library for Dicom images provided by DVTK. It's open source
http://www.dvtk.org
Following code ex I am using..
Expand|Select|Wrap|Line Numbers
- public static void ModifyDicomFile(string filePath)
- {
- DicomFile theDicomFile;
- try
- {
- theDicomFile = new DicomFile();
- theDicomFile.Read(filePath);
- if (attrInfo.PatientName == null || attrInfo.PatientName == "" || attrInfo.PatientID == null || attrInfo.PatientID == "" || attrInfo.PatientDOB == null || attrInfo.PatientDOB == "")
- Logger.Log(dirSettings.LogDirectory, "some information of Patient is missing in App.config");
- theDicomFile.DataSet.Set("0x00100010", VR.PN, attrInfo.PatientName);
- theDicomFile.DataSet.Set("0x00100020", VR.LO, attrInfo.PatientID);
- theDicomFile.DataSet.Set("0x00100030", VR.DA, attrInfo.PatientDOB);
- string relPath;
- if (!filePath.Contains(".dcm"))
- {
- relPath = dirSettings.TargetDirectory + filePath.Substring(dirSettings.SourceDirectory.Length) + ".dcm";
- }
- else
- {
- relPath = dirSettings.TargetDirectory + filePath.Substring(dirSettings.SourceDirectory.Length);
- }
- theDicomFile.Write(relPath);
- // File.Delete(filePath);
- }
- catch (Exception e)
- {
- Logger.Log(dirSettings.LogDirectory, "Error: Dicom File Modification : " + e.Message);
- }
- }
I am want to tell you that this is working for small files(2-5mb) but it giving problem me when I am trying to read 400MB files
Please solve this problem.
This is .Dot net only
Thanks,
Manesh