Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

FindFirstFile

PaoloP / 11 Antworten / Baumansicht Nickles

Hallo,

Ich habe ein mir unerklärliches Verhalten der Funktion
FindFirstFile in Visual C++ 6.

Das Problem tritt dann auf wenn ich es direkt auf ein Laufwerk anwende also genau gesagt mit manchen Laufwerken klappt es und mit anderen nicht, auf meinem Rechner befinden sich 3 Festplatten C:,D: und F:

WIN32_FIND_DATA ffdata;
HANDLE hFindFile;
hFindFile = FindFirstFile( "c:",&ffdata );

Der Aufruf funktioniert so wunderbar bei Laufwerk C: und auch auf meinem Laufwerk F: aber nicht auf D: und ich habe keine Ahnung wieso.
Natürlich habe ich es mit Backslash "d:\\\\" probiert aber dann klappt das bei keinem Laufwerk mehr. Achja es befinden sich sowohl Ordner aus auch Dateien auf den Laufwerken, ich habe natürlich versucht gleiche Testbedingungen herzustellen um den Fehler zu finden was mich aber nicht wesentlich weitergebracht hat. Hat hier vielleicht jemand eine Idee oder kennt das Problem ?

Gruss Fein
Paul



Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
d-oli PaoloP „FindFirstFile“
Optionen

Hi
Schon das probiert?
hFindFile = FindFirstFile( "D:\\*", &ffdata );

Haben alle Laufwerke das gleiche Dateisystem? Sind alles primäre Partitionen?

Gruss, d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
d-oli Nachtrag zu: „FindFirstFile“
Optionen

PS: Ich meine natürlich hFindFile = FindFirstFile( "D:\\\\*", &ffdata ); ... je nach Ansicht.

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
mr.escape d-oli „PS: Ich meine natürlich hFindFile FindFirstFile D: , ffdata ... je nach Ansicht.“
Optionen

Wie wäre es mit
hFindFile = FindFirstFile( "D:\*.*", &ffdata );

mr.escape

HANDLE FindFirstFile(
  LPCTSTR lpFileName,               // file name
  LPWIN32_FIND_DATA lpFindFileData  // data buffer
);


lpFileName
  [in] Pointer to a null-terminated string that specifies a valid directory or path and file name, which can contain wildcard characters (* and ?). If the string ends with a wildcard, a period, or a directory name, the user must have access to the root and all subdirectories on the path.

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
d-oli mr.escape „Wie wäre es mit hFindFile FindFirstFile D: . , ffdata mr.escape HANDLE...“
Optionen

Würde da nicht ".", ".." und alle Dateien ohne Endung übersehen?

d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
mr.escape d-oli „Würde da nicht . , .. und alle Dateien ohne Endung übersehen? d-oli“
Optionen
Würde da nicht ".", ".." und alle Dateien ohne Endung übersehen?
Wieso sollten sie? Auch diese namen passen zu den wildcards und ich weiß aus eigener erfahrung, dass es so läuft. Man muss vielmehr noch per "ffdata.dwFileAttributes" die überflüssigen entfernen.
Per rootkit versteckte elemente werden damit aber nicht gefunden.

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
PaoloP Nachtrag zu: „FindFirstFile“
Optionen

Also D: ist eine SCSI-Platte, das ist aber auch schon der einzige Unterschied.
Alle 3 sind logische Partitionen FAT32.

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
mr.escape PaoloP „Also D: ist eine SCSI-Platte, das ist aber auch schon der einzige Unterschied....“
Optionen

Wenn du bei der suche nur den laufwerksbuchstaben angibst, ohne eine pfadangabe, wird der aktuelle pfad des gewählten laufwerks verwendet und der kann auch etwas anderes als "'" sein.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
PaoloP mr.escape „Wenn du bei der suche nur den laufwerksbuchstaben angibst, ohne eine pfadangabe,...“
Optionen

Es funktioniert ja wenn ich "d:\\unterordner" angebe aber nicht wenn ich "d:" angebe.


Das habe ich nicht ganz verstanden glaube ich,
ich kriege kein Handle zurück also nichts.
Ich habs bei einem Freund probiert da geht D: auch nicht.
D: ist bei ihm eine erweiterte Partition.

Ich werde jetzt mal mein D: Laufwerk in Z: umbenennen. Ich bin gespannt was passiert...

Ich werde berichten.


Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
mr.escape PaoloP „Es funktioniert ja wenn ich d: unterordner angebe aber nicht wenn ich d: angebe....“
Optionen

Wenn du aber "d:\unterordner" angibst und in "D:\" tatsächlich ein ordner namens "unterordner" existiert, dann wird eben nur dieser gefunden. Eher wundert es mich, dass "C:" etwas liefert.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
mr.escape PaoloP „Es funktioniert ja wenn ich d: unterordner angebe aber nicht wenn ich d: angebe....“
Optionen

Noch was dazu:
The FindFirstFile function opens a search handle and returns information about the first file whose name matches the specified pattern. After the search handle has been established, use the FindNextFile function to search for other files that match the same pattern. When the search handle is no longer needed, close it by using the FindClose function.

In rare cases, file attribute information on NTFS file systems may not be current at the time you call this function. To obtain the current NTFS file attributes, call GetFileInformationByHandle.

This function searches for files by name only; it cannot be used for attribute-based searches.

You cannot use root directories as the lpFileName input string for FindFirstFile, with or without a trailing backslash. To examine files in a root directory, use something like "C:\*" and step through the directory with FindNextFile. To get the attributes of a root directory, use GetFileAttributes. Prepending the string "\\?\" does not allow access to the root directory.

Similarly, on network shares, you can use an lpFileName of the form "\\server\service\*" but you cannot use an lpFileName that points to the share itself, such as "\\server\service".

To examine any directory other than a root directory, use an appropriate path to that directory, with no trailing backslash. For example, an argument of "C:\windows" will return information about the directory "C:\windows", not about any directory or file in "C:\windows". An attempt to open a search with a trailing backslash will always fail.


mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
PaoloP mr.escape „Noch was dazu: The FindFirstFile function opens a search handle and returns...“
Optionen

Hallo Mr.Escape

Ja das leuchtet ein, "D:\\*" werde ich mal probieren.

DANKE !!!

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen