Vorhandene Partitionen ermitteln
-
Hallo!
Ich bin gerade dabei ein Suchprog zu schreiben, mit FindFirstFile und FindNextFile...
Was auch soweit funktioniert nur würd ich gerne nicht nur auf einer angegeben Partition nach der Datei suchen sondern auf dem ganzen Rechner.
Dazu bräuchte ich aber eine Funktion die mir angibt ob z.b.: neben C:/ auch D:/ und so weiter vorhanden sind!
Daweil hab ich das so gelöst dass ich einfach mit "[LaufwerkBuchstabe]:/." nach irgendeiner vorhandenen Datei sucht, was auch gereicht hätte; denn selbst wenn ein leeres Laufwerk vorhanden gewesen wäre, hätte sich auf diesem auch nicth die gesuchte Datei befinden können, allerdings taucht jedesmal wenn überprüft wird ob eine Partition vorhanden ist und eben keine mit dem Buchstaben da ist eine Fehlermeldung auf "Kein Datenträger vorhanden, Legen Sie einen...."-> und das nervt natürlich weil das ja garantiert einmal auftreten wird.
-
Achja ich weiß nicht ob das wichtig ist aber, wenn ich keine CD im Laufwerk liegen hab dann kommt keine Meldung wegen E:/->wenn ich aber eine drin habe dann hört er natürlich nach E:/ auf und gibt dann die Meldung für F:/ aus
Hoffe ihr kennt da ne Möglichkeit!
-
http://msdn2.microsoft.com/en-us/library/aa364425.aspx
ich denke das könnte weiterhelfen.
-
Danke, funktioniert!
-
Ok ich dachte weil es dem FindFirstFile ähnelt, würde es auch funktionieren aber das tut es leider doch nicht weil mein compiler meckert
1>..\Searcher.cpp(42) : error C3861: "FindFirstVolume": Bezeichner wurde nicht gefunden. 1>..\Searcher.cpp(46) : error C3861: "FindNextVolume": Bezeichner wurde nicht gefunden.Und in der Library (Offline) kann ichs auch nicht finden...
+Ja ich hab Windows.h drin
-
Wiedermal die Uralt-PSDKs am Start...
To compile an application that uses this function, define the _WIN32_WINNT macro as 0x0500 or later. For more information, see Using the SDK Headers.
Haben wir das auch brav gemacht vorm #include?
MfG SideWinder
-
ja danke, jetzt gehts, dafür gibts ein prob mit der var die den namen der partition speichern sollte:
LPSTR str; if(hF!=INVALID_HANDLE_VALUE) //hF = Handle von FindFirstVolume while(FindNextVolume(hF,str,128)) // str muss ein LPSTR seinhabs zuerst mit nem char array versucht, funktioniert aber nicht und die Ausgabe funktioniert deshalb nicht...
-
LPSTR hat keinen Speicher, ist ein Pointer ins nirgendwo.
MfG SideWinder
-
hm...wie bekomm ich das hin dass ich den namen in einer variable ablegen kann?
-
hmmmm? schrieb:
hm...wie bekomm ich das hin dass ich den namen in einer variable ablegen kann?
Beschäftige Dich bitte mit den Grundlagen von C/C++ bevor Du an das auslesen und evtl. an die Manipulation von Partitionen gehst...

TCHAR str[128];
-
Danke, ja das Problem ist meistens verwende ich die "Grunddatentypen", char, int und dgl.
gibts da vlt ein tutorial oder ne liste oder sowas wo man auch ähnliche datentypen finden kann?
ich mein sowas wie DWORD oder TCHAR hab ich bisher nur durch winapi zeugs mitbekommen und weiß trotzdem noch nicht genau was da der unterschied zu anderen datentypen ist...
-
So hab das jetzt hinbekommen mit dem FindFirstVolume, aber ich bekomm dann:
\?\Volume{7618009f-b2ea-und lauter andere Nummern}
wie bekomm ich daraus nun den Laufwerkbuchstaben?
einfach die Anzahl nehmen und bei A:/ beginnen bringt nichts weil manche Rechner ja nicht mal mehr ein Floppy Laufwerk haben
-
Probier mal QueryDosDevice mit dem "komischen" Namen zu füttern...
-
Danke!
Hab die Backslashs aus den Infos ausgeschnitten und den rest der daten mit QueryDosDevice gefüttert...
dabei kam dannn\Device\HarddiskVolume2 \Device\CdRom0 \Device\HarddiskVolume3 \Device\HarddiskVolume4 \Device\HarddiskVolume5 \Device\HarddiskVolume6 \Device\HarddiskVolume7 \Device\HarddiskVolume7das raus...
aber über die laufwerkbuchstaben sagt mir das doch auch nichts, oder?
-
Der Weg ist umgekehrt. Du fragst nach dem Pfad und GetVolumeInformation sagt Dir auf welchem Volume es liegt.
-
So hab das jetzt mal implementiert, hat auch funktioniert aber zwischenzeitlich hab ichs umgebaut und nun funzt es nicht mehr...ich suche schon seid ner Stunde nach dem Fehler...
Header:
#define partsAnz 512 TCHAR parts[partsAnz][512];Methode:
bool cSearcher::scanHarddiscsForPartitions(){ TCHAR lpRootPathName[512]; TCHAR lpVolumeNameBuffer[512]; DWORD nVolumeNameSize; LPDWORD lpVolumeSerialNumber; LPDWORD lpMaximumComponentLength; LPDWORD lpFileSystemFlags; TCHAR lpFileSystemNameBuffer[512]; DWORD nFileSystemNameSize; int erg=0; TCHAR buffer[512]; int x=0; for(char a='A'; a<='Z';a++){ sprintf_s(buffer,"%c:\\",a); erg=GetVolumeInformation(buffer, lpVolumeNameBuffer, 512, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags,lpFileSystemNameBuffer,512); if(erg!=0) sprintf_s(parts[x],"%s",buffer); x++; } return true; }Hoffe ihr könnt mir helfen!