dateien in einem verzeichnis feststellen
-
wie kann ich ohne einbindung von weiteren bibiotheken o.a. zum Beispiel boost feststellen welche dateien im derzeitigen (per anwahl) verzeichnis sind`?
ein beispiel wäre nett
MFG terites--;
-
Hallo
du wirst da im externe Funktionen nicht umhin kommen. Den das ist Plattform-spezifisch.
Unter Windows kannst du FindFirstFile/FindNextFile einsetzen.bis bald
akari
-
könntest du mir damit ein kleines beispiel zeigen? mit der msdn komm ich nie ganz klar

-
entschuldigung.. da war ja ein beispiel dabei. nun hab ich etwas ausprobiert aber er zeigt mir einen smiley und ein gleichzeichen nach 1.txt:
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <stdio.h>int main()
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
char dada[5] = {'1','.','t','x','t'};
printf ("Target file is %s.\n", dada);
hFind = FindFirstFile(dada, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid File Handle. GetLastError reports %d\n",
GetLastError ());
Sleep(10000);
return (0);
}
else
{
printf ("The first file found is %s\n",
FindFileData.cFileName);
FindClose(hFind);
Sleep(10000);
return (1);
}
Sleep(10000);
}die sleeps sind nur da damit ich auch etwas lesen kann
-
Hallo
dann mach dir doch mal klar, was das Programm machen soll. Denn es sucht die Datei 1.txt im aktuellen Pfad.
Allerdings ist dort tatsächlich ein kleiner Fehler, das Array ist nicht Null-Terminiert deshalb ist die Ausgabe nicht korrekt :char dada[6] = {'1','.','t','x','t', '\0'};Mehr Infos findest du im WinAPI-Forum, zum Beispiel hier
bis bald
akari
-
ok danke. ich habe nun auch ein programm gefunden das die dateien im ordner anzeigt. es werden aber jetzt nicht alle dateien angezeigt. woran kann das liegen?
-
Hallo
woher sollen wir das ohne Quellcode wissen?
bis bald
akari
-
mmhh, ich verweise an dieser stelle mal auf die boost lib
check this out http://boost.org/libs/filesystem/doc/index.htm
habs selber erst vor kurzem getestet und funzt wunderbar

-
ok noch eine frage: woher weiß ich was ein verzeichnis und was eine datei ist? mir wird beides als datei angezeigt
-
was nutz du nun ? win32 api oder boost?
-
winapi
-
so da muss ich doch mal in meinen projekten wühlen...
WIN32_FIND_DATA w32fd; if( w32fd.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY ){ //datei ist ein ordner //mach irgenwas mit dem ordner } else{//datei ist eine datei //mach irgendwas mit der datei }w32fd.cFileName gibt nen cstring an...was der name der datei wäre...
guckst du hier: http://www.microsoft.com/germany/msdn/library/office/RekursiveDateisuche.mspx?mfr=true
und ich erinnere dich nochmal an boost...ist viel einfacher...und sollte plattformunabhängig sein
-
habs noch nicht auf die reihe bekommen boost mit in codeblocks zu linken.
-
welche file_attribute gibt es noch?
-
-
http://msdn2.microsoft.com/de-de/library/3k3z0k7a.aspx
und hier aus der winnt.h kopiert...
#define FILE_ATTRIBUTE_READONLY 0x00000001 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 #define FILE_ATTRIBUTE_DEVICE 0x00000040 #define FILE_ATTRIBUTE_NORMAL 0x00000080 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 #define FILE_ATTRIBUTE_OFFLINE 0x00001000 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
-
und nochmal eine frage: im laufwerk c: dort habe ich nur windows und den standart programmordner, wird mir der ordner "programme" als datei angezeigt. warum?
-
ka. ohne source code ist das sehr schwer, wenn nicht gar unmöglich nachzuvollziehen...
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
#define _WIN32_WINNT 0x0501 #include <windows.h> #include <string.h> #include <stdio.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { WIN32_FIND_DATA FindFileData; HANDLE hFind = INVALID_HANDLE_VALUE; char DirSpec[MAX_PATH + 1]; // directory specification DWORD dwError; printf ("Target directory is %s.\n", argv[1]); strncpy (DirSpec, argv[1], strlen(argv[1])+1); strncat (DirSpec, "\\*", 3); hFind = FindFirstFile(DirSpec, &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { printf ("Invalid file handle. Error is %u\n", GetLastError()); return (-1); } else { while (FindNextFile(hFind, &FindFileData) != 0) { if( FindFileData.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY ) { cout << "Directory: " << FindFileData.cFileName << "\n"; } else { cout << "File: " << FindFileData.cFileName << "\n"; } } dwError = GetLastError(); FindClose(hFind); if (dwError != ERROR_NO_MORE_FILES) { printf ("FindNextFile error. Error is %u\n", dwError); return (-1); } } return 0; }Das ist das gemeinte Programm. Ab und zu werden dort Ordner als Dateien angegeben oder habe ich etwas nicht berücksichtigt?
-
terites--; schrieb:
oder habe ich etwas nicht berücksichtigt?
Hast du. Die Dateiattribute sind Flags, die miteinander kombiniert werden können. Es reicht also nicht aus, auf Gleichheit mit FILE_ATTRIBUTE_DIRECTORY zu prüfen, denn damit erreichst du nur die Verzeichnisse, bei denen kein anderes Flag gesetzt ist.
Formulier die Prüfung so:
if( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )