datei suche

  • Themenstarter Themenstarter dacoma
  • Beginndatum Beginndatum
Hey,

hat sich erledigt, ich hab es mitlerweile selbst hinbekommen! Funktioniert so, wie ich es mir vorstelle!
Trotzdem vielen Dank für deine Hilfe!

Gruß
Dorschty
 
Hi.

Eine Sache noch:
C:
// Ist das ein Ordner ?
if (FData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
FData.dwFileAttributes enthält Bit-Flags. Der Test würde nicht für Verzeichnisse funktionieren, wo andere Bits auch noch gesetzt sind. Z.B. würde ein verstecktes Verzeichnis als Datei klassifiziert werden...
C:
// ist es ein Ordner?
if (FData.dwFileAttributes & FILE_ATTRIBUTES_DIRECTORY)
Gruß
 
Hallo,
erstmal Danke, dieser Thread hat auch mir sehr weitergeholfen! :)

Eine Frage hätte ich allerdings diesbezüglich noch:

Code:
#define SEARCH_FOLDER "C:\\*.zip*"
hier suche ich ja nach ZIP-Files.
Wie müsste es aussehen wenn ich erstmal nach allen Partitionen auf dem Computer
suchen wollen würde?

Vielen Dank im Voraus
steedz
 
hö?
ne ich meine dass man eben sieht partition C,D,E,F vorhanden zb.

Code:
#define SEARCH_FOLDER "C:\\*.*"

also den Pfad hier quasi noch ne Ebene nach unten durchsuchen...
geht das überhaupt?
 
Hi.

Du meinst vermutlich nicht die Partitionen, sondern die Laufwerke, oder?!

Das kannst du dann mit der Funktion GetLogicalDriveStrings() (siehe MSDN) machen:
C:
#define _WIN32_WINNT 0x0501

#include <windows.h>

TCHAR buf[MAX_PATH];
  
DWORD c = GetLogicalDriveStrings(MAX_PATH, buf);
if (c < MAX_PATH && c > 0) {
  for (TCHAR* p = buf; p < buf + c; p += 1 + strlen(p)) 
    {
      puts(p);
    }
}
Gruß
 
Danke genau das meinte ich!!

so natürlich haben sich hiermit neue Probleme für mich eröffnet :rolleyes:

Code:
int _tmain(int argc, _TCHAR* argv[])
{
    int i = 0, n;
	string * vPartition;
	vPartition = new string[n];
	
	TCHAR buf[MAX_PATH];
    DWORD c = GetLogicalDriveStrings(MAX_PATH, buf);
    if (c < MAX_PATH && c > 0) {  
          for (TCHAR* p = buf; p < buf + c; p += 1 + strlen(p))     {
                    vPartition[i] = p;
                    i++;
                    
          }
    }
    string holder = vPartition[0];
    char * drive;
    char * tmp;
    
    tmp = &holder[0];
    
    for(i = 0; i < (strlen(tmp) - 1); i++)
    {     
          drive[i] = tmp[i];
    }
    
    strcat(drive,"//*");
    cout<<drive<<endl;
    
    _tSearchPath(drive);
    
    delete[] vPartition;
    system("PAUSE");
    return 0;
}

Problem 1:
mit GetLogicalDriveStrings bekomme ich meine Laufwerke so "C:\" geschrieben. Das heisst ich kann sie nicht einfach in einen string kopieren und den dann als Pfad verwenden, sondern muss die Schreibweise erst abändern.
Das hab ich hiermit versucht, aber ich bekomme immer ein Zeichen zuviel mit in das Array, keine Ahnung warum :mad:

Code:
 for(i = 0; i < (strlen(tmp) - 1); i++)
    {     
          drive[i] = tmp[i];
    }
    
    strcat(drive,"//*");
    cout<<drive<<endl;

Problem 2:
da ich später dann mit "FindFirstFile" arbeite benötige ich ja den Pfad als Char File.
Deswegen converte ich hier auch string to char
Code:
string holder = vPartition[0];
    char * drive;
    char * tmp;
    
    tmp = &holder[0];
.... aber besonders elegant ist das sicher nicht. Hat da jemand vielleicht ne bessere Lösung?

Vielen Dank im Voraus
stEEdZ
 
Mehrere Fehler drin ...
1. Du kannst nur bei std::vector davon ausgehen, dass die Elemente hintereinander im Speicher liegen. (=> &string[0] solltest du besser lassen)
2. std::string muss intern nicht Nullterminieren.
3. Du hast für drive keinen Speicher angefordert. WO du jetzt gerade geschrieben hast ... will ich gar nicht wissen :D
4. Nicht TCHAR und char mischen, wenn du nicht weißt was du da tust ;)
 
Zurück