2013-04-29 2 views
1

드라이브/SD 카드 (FAT 32/NTFS 등)의 파일 형식을 확인하고 표시해야하는 앱을 만들고 있습니다. 이 응용 프로그램은 MAC 및 Windows에서 실행해야하는 Qt 기반 응용 프로그램입니다. 결과를 얻을 수있는 Qt API가 없으므로이 접근법을 선택했습니다. 내가 Windows에서 그것을 달성하는 방법 Qt 응용 프로그램의 MAC OS에서 드라이브의 파일 형식을 얻는 방법?

은 다음과 같습니다

TCHAR volumeName[MAX_PATH + 1] = { 0 }; 
TCHAR fileSystemName[MAX_PATH + 1] = { 0 }; 
DWORD serialNumber = 0; 
DWORD maxComponentLen = 0; 
DWORD fileSystemFlags = 0; 

LPCWSTR path = deviceData->m_strPath.utf16(); //deviceData->m_strpath gives me the drive path 

if (GetVolumeInformation(
    path, 
    volumeName, 
    ARRAYSIZE(volumeName), 
    &serialNumber, 
    &maxComponentLen, 
    &fileSystemFlags, 
    fileSystemName, 
    ARRAYSIZE(fileSystemName))) 
{ 
     newData.strFileSystem = QString::fromUtf16(fileSystemName); 
} 

    QList m_SDInfoList; 
    m_SDInfoList.append(newData); 

내 관심사는 내가 같은 드라이브/SD 카드를 연결하면 나에게 파일 형식 정보를 제공 할 수있는 MAC API를 찾을 수 없습니다 오전입니다 MAC 기계에서. 제발 도와주세요 :)

답변

4

나는 꽤 많은 winapi 방법의 osx 등가물을 찾는 비슷한 문제가 있었어. 그리고 내가 구현할 수있는 가장 빠른 해결책은 osx에서 QProcess를 통해 명령 행 유틸리티를 사용하는 것입니다. 아마도 API 호출이 더 느려질 것입니다. 그러나 드물게 사용한다면 괜찮을 것입니다. 예를 들어

:

diskutil info /dev/disk0s2 

는 QProcess 출력에서 ​​읽을 수있는 다음과 같은 출력

(...) 
Partition Type:   Apple_HFS 
(...) 

을 제공합니다.

QProcess p; 
p.start("diskutil",QStringList() << "info" "/path/to/dev"); 
p.waitForFinished(); 
foreach(QString line, QString(p.readAll()).split("\n")) 
    if(line.contains("Partition Type:")) 
     qDebug() << line 

이렇게하면됩니다.

+0

Bowles Sorhus : 답장을 보내 주셔서 감사합니다. 나는 맥에서 일한 적이 없기 때문에 나는 거의 깨닫지 못한다. 나는 왜 당신이 "/ path/to/dev"를 넘었는지 알고 싶다. 만약 드라이브의 경로를 지적했다면, "deviceData-> m_strpath"가 내 코드에서 드라이브 경로를 제공 할 것이다. 아니면 다른 것을 지적하고있을 수도 있습니다 :) – Gojira

+2

"/ path/to/dev"= "/ dev/disk0s2"제 경우입니다. 예를 들어 방금 xcode 하드웨어 io 도구 이미지를 "/ Volumes/Hardware IO Tools"에 마운트했습니다. 그럼 내가 사용할 수있는 df | grep "Hardware"는/dev/disk3s2 인 장치를 찾은 다음 필요한 출력을 생성 한 "diskutil info/dev/disk3s2"에서 사용합니다. –

+0

감사합니다 .... 그것은 매력처럼 작동합니다 :) – Gojira

관련 문제