fix: fix DICOM load bug with chinese path
This commit is contained in:
@@ -5,7 +5,8 @@
|
||||
#include "dcmtk/dcmdata/dcdatset.h"
|
||||
#include "dcmtk/dcmdata/dcspchrs.h"
|
||||
#include "ExtendMedicalImageProperties.h"
|
||||
#include <vtkDirectory.h>
|
||||
#include <QDir>
|
||||
#include <qDebug>
|
||||
#include <vtkNew.h>
|
||||
#include <unordered_map>
|
||||
#include <algorithm>
|
||||
@@ -40,23 +41,19 @@ void DICOMHeaderHelper::Clear() {
|
||||
}
|
||||
|
||||
void DICOMHeaderHelper::readHeaderFromDir(const char * rootPath){
|
||||
vtkNew<vtkDirectory> dir;
|
||||
dir->Open(rootPath);
|
||||
vtkIdType fileCount = dir->GetNumberOfFiles();
|
||||
for (vtkIdType i = 0; i < fileCount; ++i) {
|
||||
const char* file_path = dir->GetFile(i);
|
||||
if (strcmp(".",file_path)==0 || strcmp("..",file_path)==0 ) continue;
|
||||
std::string path(rootPath);
|
||||
path.append("\\");
|
||||
path.append(file_path);
|
||||
std::cout<<"file path:"<<path<<std::endl;
|
||||
|
||||
if (dir->FileIsDirectory(path.c_str()))
|
||||
QDir dir(QString::fromLocal8Bit(rootPath));
|
||||
dir.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
|
||||
dir.setSorting(QDir::Name | QDir::DirsFirst);
|
||||
QFileInfoList list = dir.entryInfoList();
|
||||
for(auto file : list)
|
||||
{
|
||||
readHeaderFromDir(path.c_str());
|
||||
std::string apath = file.absoluteFilePath().toLocal8Bit().toStdString();
|
||||
if (file.isDir())
|
||||
{
|
||||
readHeaderFromDir(apath.data());
|
||||
}
|
||||
else {
|
||||
readHeaderFromFile(path.c_str());
|
||||
else{
|
||||
readHeaderFromFile(apath.data());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -249,22 +246,19 @@ void DICOMHeaderHelper::readHeaderFromFile(const char * filePath){
|
||||
void DICOMHeaderHelper::ReadHeader() {
|
||||
|
||||
if (!this->dirName.empty()){
|
||||
vtkNew<vtkDirectory> dir;
|
||||
dir->Open(this->dirName.c_str());
|
||||
vtkIdType fileCount = dir->GetNumberOfFiles();
|
||||
for (vtkIdType i = 0; i < fileCount; ++i) {
|
||||
const char* file_path = dir->GetFile(i);
|
||||
if (strcmp(".",file_path)==0 || strcmp("..",file_path)==0 ) continue;
|
||||
std::string path(dirName);
|
||||
path.append("\\");
|
||||
path.append(file_path);
|
||||
|
||||
if (dir->FileIsDirectory(path.c_str()))
|
||||
QDir dir(QString::fromLocal8Bit(dirName.data()));
|
||||
dir.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
|
||||
dir.setSorting(QDir::Name | QDir::DirsFirst);
|
||||
QFileInfoList list = dir.entryInfoList();
|
||||
for(auto file : list)
|
||||
{
|
||||
readHeaderFromDir(path.c_str());
|
||||
std::string apath = file.absoluteFilePath().toLocal8Bit().toStdString();
|
||||
if (file.isDir())
|
||||
{
|
||||
readHeaderFromDir(apath.data());
|
||||
}
|
||||
else {
|
||||
readHeaderFromFile(path.c_str());
|
||||
else{
|
||||
readHeaderFromFile(apath.data());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user