DICOM 파일을 읽는 응용 프로그램을 작성하고 있으므로 다른 라이브러리를 사용해야합니다. 라이브러리가 파일을 열지 만 파일을 닫으면 파일을 닫지 않습니다. 그리고 도서관은 오픈 소스가 아닙니다. 열린 파일 제한은 리눅스에서 1024이며, 번호를 변경할 수 있다는 것을 알고 있습니다. 그러나 나는 그 길을하고 싶지 않습니다. 나는 도서관에 의해 열린 파일을 닫고 싶다. C가 열리는 것을 알고 있으면 C에서 파일을 닫는 방법. 나는 http://cbi.nyu.edu/software/dinifti.php에서 얻은 DICOM2NII 라이브러리를 사용하고 있습니다. 는 그리고이 파일을 열 수있는 코드이지만이미 열려있는 C에서 파일을 닫는 방법
bool DICOMImage::OpenFile(const char *path)
{
bool retValue = true;
DCM_Objects handle_;
unsigned long options = DCM_ORDERLITTLEENDIAN | DCM_FORMATCONVERSION | DCM_VRMASK;
// Try opening as PART10, if it fails it's might be bcause it does not have
// a preable and the try it that way
if (DCM_OpenFile(path, options | DCM_PART10FILE, &handle_) != DCM_NORMAL)
{
DCM_CloseObject(&handle_);
COND_PopCondition(TRUE);
if (DCM_OpenFile(path, options, &handle_) != DCM_NORMAL)
{
retValue = false;
}
else
retValue=true;
}
return retValue;
}
파일을 다 읽었을 때 파일을 닫을 때 라이브러리가 별도의 기능을 제공하지 않습니까? –
예. 이 헤더 파일에서 찾을 수 있지만 가지고 있지 않습니다. 이것은 주된 문제입니다 – user2143123
라이브러리 소스가 사용 가능해 보입니다 (ftp://ftp.erl.wustl.edu/pub/dicom/software/ctn/). 또한'DCM_OpenFile()'이'DCM_FILEACCESSERROR' 오류를 반환 할 때 파일 핸들을 누출시킬 수 있지만'fstat()'에 대한 호출이 실패하거나 파일의 크기가'INT_MAX'보다 클 경우에만 발생합니다 그게 당신이 달리고있는 것입니까?). 무의미한 말로,'DCM_OpenFile()'은 파일을 여는 것보다 더 많은 일을하기 때문에 (실제로 파일이 끝나면 파일을 닫을 것입니다) 이름이 잘못 붙어있는 것 같습니다. –