我正在编写读取DICOM文件的应用程序,我必须使用其他库来执行此操作。我发现图书馆将打开文件,但完成后不会关闭文件。而图书馆不是开源的。我知道在Linux中打开文件限制是1024,我可以更改数字。但我不想这样做。我喜欢关闭由库打开的文件。如果我知道它正在打开,如何在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;
}
当您完成这些操作后,库是否不提供关闭文件的单独功能? – 2013-03-07 07:15:00
是的。我在这个头文件中找到但没有。这是主要问题 – user2143123 2013-03-07 07:15:50
它看起来像库的来源是可用的(ftp://ftp.erl.wustl.edu/pub/dicom/software/ctn/)。它看起来像'DCM_OpenFile()'可以在文件句柄返回DCM_FILEACCESSERROR错误时泄漏,但只有在调用fstat()失败或者文件大小大于INT_MAX时才会发生。这就是你遇到的情况?)。毫无意义:在我看来'DCM_OpenFile()'命名不好,因为它不仅仅是打开文件(事实上,它通常会在文件完成时关闭文件)。 – 2013-03-07 08:18:42