Lokale Partition ermitteln



  • Hallo Leute!

    Wie kann ich die lokale Partition ermitteln? (zb C:\).

    Danke!

    MFG



  • Suchst du sowas wie GetLogicalDrives bzw. GetLogicalDriveStrings?



  • Ganz genau, danke.

    Hmm hab aber leider ein Problem damit.
    Kanns weder zeichenweise noch mit dem "%s" Format richtig in die Datei schreiben.

    Weiss jmd wie ich das mache?



  • Ok, das klappt nur sagt mir das leider nicht welches das aktuelle Verzeichniss ist, sprich das,das der User verwendet.

    Lg



  • Was verstehst du unter dem Verzeichnis, das der User verwendet?!


  • Mod

    Meinst Du das Verzeichnis in dem Windows die lokalen User Daten ablegt?

    Schau Dir mal SHGetFolderPath mit CSIDL_PROFILE an!



  • Danke



  • Hi erm gibts da keine andere Möglichkeit?
    Blick da nicht so ganz durch.

    Es würde auch schon reichen wenn ich wüsste wie ich überprüfen könnte ob eine gewisse Datei existiert.

    Hmm kenn da schon ein paar Methoden nur sind die unschön zb fopen rückgabewert überprüfen oder so ähnliche.

    Gibts ne Funktion die einfach überprüft ob ne Datei existiert?

    Lg.



  • OpenFile mit OF_EXIST
    oder etwas umständlicher mit: FindFirstFile



  • Hmmm nein reicht wohl doch nicht...



  • Ok hab ne Lösung die eig sehr einfach ist:

    system("echo %systemdrive%);

    nur leider geht: char drive=system("echo %systemdrive%); nicht.

    Wie bkomm ich das in einen String?

    MFG





  • Muhi89 schrieb:

    nur leider geht: char drive=system("echo %systemdrive%); nicht.

    system("echo %systemdrive%>tmp");
    FILE *fp = fopen("./tmp");
    fscanf(fp,"%s",drive);
    fclose(fp);

    Is etwas umständlich... gibt's sicher auch noch ne WinAPI-Funktion für...

    edit: verdammt bin ich blind... sorry 🙄



  • oh man... 🙄

    char cBuf[MAX_PATH];
    GetWindowsDirectory(cBuf, sizeof(cBuf));
    

    Wenn du dir davon die ersten Zeichen holst hast du das Systemlaufwerk.



  • DWORD dwLogicalDrives, x;
    			TCHAR szRoot[32];
    			LVITEM item;
    			SHFILEINFO shInfo;
    
    			item.mask = LVIF_IMAGE | LVIF_TEXT | LVCF_FMT;
    			item.pszText = L"";
    			item.iImage = 0;
    			item.iSubItem = 0;
    
    			ListView_SetExtendedListViewStyle(GetDlgItem(phDlg[0], IDC_LIST),LVS_EX_SUBITEMIMAGES);	
    			HIMAGELIST g_hImageLst = ImageList_Create(16,16,ILC_MASK | ILC_COLOR32, 5, 0);		
    			ListView_SetImageList(GetDlgItem(phDlg[0], IDC_LIST), g_hImageLst, LVSIL_SMALL);
    
    			dwLogicalDrives = GetLogicalDrives();
    
    			for(x = 0; x < (sizeof(dwLogicalDrives) * 8); x++)
    			{		
    				if(IS_BIT(dwLogicalDrives, x))
    				{
    					PathBuildRoot(szRoot, x);
    					item.iItem = x;
    					item.iImage = x;
    
    					SHGetFileInfo(szRoot,FILE_ATTRIBUTE_NORMAL, &shInfo, sizeof(shInfo), SHGFI_USEFILEATTRIBUTES | SHGFI_DISPLAYNAME | SHGFI_TYPENAME | SHGFI_ICON | SHGFI_SMALLICON);	
    					ImageList_AddIcon(g_hImageLst, shInfo.hIcon);
    					DestroyIcon(shInfo.hIcon);
    					item.pszText = shInfo.szDisplayName;
    					ListView_InsertItem(GetDlgItem(phDlg[0], IDC_LIST), &item);
    					ListView_SetItemText(GetDlgItem(phDlg[0], IDC_LIST), x, 0, item.pszText);
    				}
    			}
    

    kram dir raus was du brauchst 🙂



  • Danke für die vielen Antworten!



  • Nur noch ne Frage zu GetWindowsDirectory:

    Was ist wenn ich auf beiden Festplatten Windows installiert habe?
    Dann kommt doch nur das Verzeichnis in dem das momentan aktive Windows ist oder?

    MFG



  • Wohl schon - dein Windows weiß ja ggf. nicht einmal was von der anderen Installation...


Log in to reply