tagspaces tag online mp3tag files and windows path device

windows - online - tag folders



Resolver la ruta del dispositivo de Windows para conducir la letra (3)

¿Tal vez podrías usar GetVolumeNameForMountPoint e iterar a través de todos los puntos de montaje A: / a Z: /, rompiendo cuando encuentres una coincidencia?

http://msdn.microsoft.com/en-us/library/aa364994(VS.85).aspx

(No lo he intentado)

¿Cómo se resuelve una ruta de dispositivo de estilo NT, por ejemplo, / Device / CdRom0, a la letra de la unidad lógica, por ejemplo, G: /?

Editar: Un nombre de volumen no es lo mismo que una ruta de dispositivo, por lo que desafortunadamente GetVolumePathNamesForVolumeName () no funcionará.


Es de esperar que la siguiente pieza de código le dará lo suficiente para resolver esto: una vez que lo haya inicializado, solo necesita recorrer la colección para encontrar su coincidencia. Es posible que desee convertir todo en mayúsculas / minúsculas antes de insertar en la colección para ayudar con el rendimiento de búsqueda.

typedef basic_string<TCHAR> tstring; typedef map<tstring, tstring> HardDiskCollection; void Initialise( HardDiskCollection &_hardDiskCollection ) { TCHAR tszLinkName[MAX_PATH] = { 0 }; TCHAR tszDevName[MAX_PATH] = { 0 }; TCHAR tcDrive = 0; _tcscpy_s( tszLinkName, MAX_PATH, _T("a:") ); for ( tcDrive = _T(''a''); tcDrive < _T(''z''); ++tcDrive ) { tszLinkName[0] = tcDrive; if ( QueryDosDevice( tszLinkName, tszDevName, MAX_PATH ) ) { _hardDiskCollection.insert( pair<tstring, tstring>( tszLinkName, tszDevName ) ); } } }


La siguiente función hace el trabajo usando solo C

BOOL GetWin32FileName(const TCHAR* pszNativeFileName, TCHAR *pszWin32FileName) { BOOL bFound = FALSE; // Translate path with device name to drive letters. TCHAR szTemp[MAX_PATH]; szTemp[0] = ''/0''; if (GetLogicalDriveStrings(MAX_PATH - 1, szTemp)) { TCHAR szName[MAX_PATH]; TCHAR szDrive[3] = TEXT(" :"); TCHAR* p = szTemp; do { // Copy the drive letter to the template string *szDrive = *p; // Look up each device name if (QueryDosDevice(szDrive, szName, MAX_PATH)) { size_t uNameLen = _tcslen(szName); if (uNameLen < MAX_PATH) { bFound = _tcsnicmp(pszNativeFileName, szName, uNameLen) == 0 && *(pszNativeFileName + uNameLen) == _T(''//'); if (bFound) { // Replace device path with DOS path StringCchPrintf(pszWin32FileName, MAX_PATH, TEXT("%s%s"), szDrive, pszNativeFileName + uNameLen); } } } // Go to the next NULL character. while (*p++); } while (!bFound && *p); } return(bFound); }