Verzeichnis auslesen
-
hallo,
ich arbeite unter Visual Studio und versuche ein Programm zu schreiben, das ein Verzeichnis(besteht aus mehrere txt Datei) einliest und dann geht alle Dateien durch, ich kann nur diese Dateien einzeln einlesen.
int _tmain(int argc, _TCHAR* argv[]) { std::vector<double> coords; std::ifstream FileCoords; FileCoords.open("/Coords/datei1.txt", std::ios_base::in); if (FileCoords.good()) { double x,y; while (! FileCoords.eof()) { FileCoords >> x; FileCoords >> y; coords.push_back(double(x,y)); } } else { cerr << "Datei nicht gefunden." << std::endl; } return 0; }
mein hauptproblem ist, dass VS "dirent.h" nicht erkennt.
ich danke für die Hilfe
-
dirent.h gehört zum posix standard und ist deswegen nicht bei jedem compiler dabei. Du musst die WinAPI Funktionen FindFirstFile, FindNextFile und Findclose benutzen. Oder du kannst mal im Internet nach der Bibliothek suchen.
-
ns schrieb:
mein hauptproblem ist, dass VS "dirent.h" nicht erkennt.
Könnte es "zufällig" sein, dass du VS auf einem Windows System ausführst? dirent.h ist nämlich ein Standardheader auf POSIX Systemen, aber Microsoft hält nicht viel davon, Windows dem POSIX Standard anzupassen.
-
Geht auch relativ easy mit Boost:
#define BOOST_FILESYSTEM_NO_DEPRECATED #include "boost/filesystem/operations.hpp" #include <iostream> int main() { boost::filesystem::path full_path( "C:\\" ); boost::filesystem::directory_iterator end_iter; if ( boost::filesystem::is_directory( full_path ) ) for(boost::filesystem::directory_iterator dir_iter( full_path ); dir_iter != end_iter; ++dir_iter) std::cout<< dir_iter->path().filename() <<std::endl; std::cin.get(); }
-
Oder so ohne boost:
bool Rekursive_Datei_Suche(string StartFo) { HANDLE Rekursiv_Datei_Handle; WIN32_FIND_DATA Rekursiv_Datei_Struktur; string StartFo2 = ""; string StartFoFE = StartFo + "\\*"; Rekursiv_Datei_Handle = FindFirstFile(StartFoFE.c_str(), &Rekursiv_Datei_Struktur); do { string Rekursiv_string_Dateiname = Rekursiv_Datei_Struktur.cFileName; if (((Rekursiv_Datei_Struktur.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0 )) { if(Rekursiv_string_Dateiname != "." && Rekursiv_string_Dateiname != "..") { StartFo2 = StartFo + "\\" + Rekursiv_Datei_Struktur.cFileName; Rekursive_Datei_Suche(StartFo2); } } else { if((Rekursiv_string_Dateiname.find(".txt") != std::string::npos)) { string Rekursion_Dateipfad = StartFo + "\\" + Rekursiv_Datei_Struktur.cFileName; if(!ueberpruefen_ob_Datei_geladen_wurde(Rekursion_Dateipfad)) { Datei_an_Server_senden(Rekursion_Dateipfad, (string)Rekursiv_Datei_Struktur.cFileName); } } } } while(FindNextFile(Rekursiv_Datei_Handle,&Rekursiv_Datei_Struktur)); FindClose(Rekursiv_Datei_Handle); return true; }
Das im else Block kannst du dir natürlich selbst aussuchen