Programm soll den Namen der Datei herausfinden
-
also das von Simon2 is mir grad net klar, ich will ja in dem programm den namen von einer Datei rauskriegen die in dem Ordner ist nur wie mache ich das ??
EDIT: ich habe XP
-
Was für ein Betriebssystem? Unter Windows könntest du mit FindFirstFile()/FindNextFile() dein Verzeichnis durchsuchen, Unix hat sicher etwas vergleichbares.
(und Boost::Filesystem ist sicher auch einen Blick wert)
-
@CStoll, kannste zu deinem Beitrag vieleicht ein Beispeil machen, also ich will dann den ordner öffnen und alle in dem ordner enthaltenen dateinamen auslesen
ich weiß nur nich den algo zum öffnen der datei und zum lesen der dateinamen, da bäruchte ich denkhilfe
-
-
Aus dem Kopf nicht - aber wenn du in der MSDN nach "FindFirstFile()" suchst, findest du afair auch einen Beispielcode zum Verzeichnis durchsuchen.
(und zum Sammeln aller Dateinamen kannst du einen fstream anlegen und alle gefundenen Namen dort reinschreiben)
-
#include<iostream> #include<fstream> #include<windows.h> #include<vector> #include<string> int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,PSTR cmdoben,int cmdshow) { HANDLE fhandle; WIN32_FIND_DATA wfd; vector<string> namen; fhandle=FindFirstFile("C:\\*",&wfd); FindNextFile(fhandle,&wfd); while(FindNextFile(fhandle,&wfd)) { namen.push_back(wfd.cFileName); } MessageBox(0,wfd.cFileName,"Folgende DAtei wurde gefunden: ",0); FindClose(fhandle); }also ich habe das jetzt heir im forum gefunden, ich habe schon mitbekommen das das mit dem vector net so ganz geht,ich wollte alle gefunden datein und ordnernamen in den vector schreiben und sie am ende in einer einzigen messagebox ausgeben lassen, nur ich weiß nicht wie man das in winapi macht, kann mir da einer helfen das die ganzen namen erstmal gesammelt werden??
EDIT:isses vieleicht möglich das auch ohne winapi zu machen, sicherlich nicht oder?
-
ich denk mal boost wird die die winapi schön verpacken, so dass man sie nicht sehen muss
könnte aber auch ohne winapi implementiert sein, was ich allerdings nicht glaube.
-
Hallo
Schau dir doch mal boost::filesystem an.
chrische
-
hmm... scheiße ich bin halt noch anfänger kannste mir erklären was du mit boost meinst und wie ich mein problem lösen kann??
also alle gefunden datein nicht hintereíander in einerimmer neuen msgbox ausgeben wie es wäre wenn die Messagebox in der schleife stehen würde, sondern die dateinamen sammeln,am besten in einem vector und dann mti einmal ausgeben...so das ich dann später die gesammelten namen in eine datei schreiben kannEDIT:über ein beispiel wäre ich sehr erfreut
-
Keine Ahnung ob es dir weiterhilft, aber ich suche damit nach bestimmten Dateiendungen
//************************************************************************** //* Zeigt gefundene Dateien ohne Unterverzeichnisse in einem Memofeld an * //************************************************************************** // // Übergabeparameter : -> directory = aktueller Pfad // : -> mask = Dateityp // void __fastcall TForm1::find(const String& directory, const String& mask) { // Variablen werden definiert ffblk finde; // Speicher für gefundene Dateien char nwd[MAXPATH]; // Speicher für neuen Pfad char cwd[MAXPATH]; // Speicher für aktuellen Pfad String file; // Speicher für Pfad u. Datei unsigned int ma; // Speicher für die Länge der Dateimaske char tmp[MAXPATH]; // Speicher ma = mask.Length(); // ermittelt die Länge der Dateimaske // und speichert diese in ma getcwd(cwd,MAXPATH); // aktuelle Pfad wir ermittelt und in cwd // abgespeichert done = findfirst("*.*",&finde,0); // wenn eine Datei gefunden wird ist done=0 // und die Whileschleife wird ausgeführt while (done==0) // solange done gleich 0 ist { sprintf(tmp,"%s",finde.ff_name + strlen(finde.ff_name)- ma);//vergleicht if (strncmp(tmp,mask.c_str(),ma) == 0) // wenn die gefundende Datei mit { // der Dateimaske übereinstimmt dann file = (String)cwd + "\\" + finde.ff_name;// Pfad + Dateienname // werden in File gespeichert if(z!=1) // wenn z ungleich 1 dann { lbxFiles->Items->Add(file); lbxTitel->Items->Add(TitelErmitteln(file.c_str())); // werden die Dateienamen // und Pfad ausgegeben all=StrToInt(finde.ff_fsize); // díe gefundenen Dateien a=a+all; // werden gezählt und die q++; // Größe bzw. Menge wird } // ausgegeben else // ansonsten wird { DeleteFile((String)cwd + "\\" + finde.ff_name);// die Datei von der // Festplatte gelöscht last=StrToInt(finde.ff_fsize); // Zähler wird berechnet x++; // Zähler wird hochgezählt } } done = findnext(&finde); // Wird eine weitere Datei gefunden ist } // done gleich 0 und die Whileschleife // wiederholt sich so oft bis keine Datei } // mehr gefunden wird //------------------------------------------------------------------------------Welche Header du genau brauchst kann ich dir leider auf die schnelle nicht sagen, aber wenn er was anmeckert einfach mal nach googlen.