wie bekomme ich nur den letzten Ordner in einem Verzeichnis?
-
hi,
vielleicht kann mir einer weiterhelfen. ich möchte den letzten ordner in einem verzeichnis "herausfinden" und diesen in eine datei schreiben.
soll so aussehen:
C:/Benutzer/Dokumente/Ordner/Unterordnerund nur "Unterordner" soll gecachet werden, damit er dann in nachstehenden code eingefügt werden kann.
ofstream config; //wenn nur fstream, muss file schon existieren!!!
if(myfile.is_open())
{
//preform the operation(s):
myfile << Unterordner << endl;
//function to close the file:
myfile.close();
}
else
{
//is_open() returned false and there is a problem:
cout << "Can't open the file!" << endl;
}hab das ganze mit hSearch = FindFirstFile probiert, geht aber nicht so, wie ich mir das vorstelle. hab noch was von getDirectories gelesen, aber kein plan, wie das funktionieren könnte. für hilfe wäre ich dankbar.
HANDLE hSearch = FindFirstFile(Pfad.c_str(),&DIR);
BOOL MoreFiles = FALSE;
int cnt_dir = 0, cnt_file = 0;if (hSearch == INVALID_HANDLE_VALUE) return -1;
//declare the variable of type ofstream since you are dealing with output:
ofstream config; //wenn nur fstream, muss file schon existieren!!!
//function to open the file which includes the file name:
config.open ("C:\\Users\\Username\\Documents\\ordnername.txt", ios::out | ios::app);//DO-SCHLEIFE
do
{
// Ist das ein Ordner ?
if (FData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
cnt_dir++; // Ordnerzähler um 1 erhöhen
}// Wenn nicht
else
{
if(config.is_open())
{
//preform the operation(s):
config << ORDNERNAME = FData.cFileName;
// Den Ordnernamen ausgeben
cout<<"(Ordner) "<<FData.cFileName<<endl;
//function to close the file:
config.close();
}
else
{
cout<<"Das ist kein Ordner";
}
MoreFiles = FindNextFile(hSearch,&DIR);
}
while (MoreFiles);
FindClose(hSearch);
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) 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.
-
wer soll den buchstabensalat lesen?
-
Benutze mal die cpp-Tags um deinen Code, dann kann man ihn vielleicht auch lesen.
Um zu entscheiden welcher der letzte Ordner ist musst du eine Ordnung festlegen, alphabetische Ordnung oder so.
Bei http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx steht, wie man durch die Dateien iteriert. Damit bekommst du auch die Ordnernamen und kannst dir immer den lexikographisch größten Ordner merken.
Mit"Unterordner" soll gecachet werden
meinst du der Ordnername soll gespeichert werden, richtig?
-
ja, der Unterordner soll sozusagen gemerkt und dann in die datei gespeichert werden.
-
nwp3 schrieb:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx
Listing the Files in a Directory
Der entscheidende Teil:
hFind = FindFirstFile(szDir, &ffd); if (INVALID_HANDLE_VALUE == hFind) { DisplayErrorBox(TEXT("FindFirstFile")); return dwError; } // List all the files in the directory with some info about them. do { if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { _tprintf(TEXT(" %s <DIR>\n"), ffd.cFileName); } else { filesize.LowPart = ffd.nFileSizeLow; filesize.HighPart = ffd.nFileSizeHigh; _tprintf(TEXT(" %s %ld bytes\n"), ffd.cFileName, filesize.QuadPart); } } while (FindNextFile(hFind, &ffd) != 0);
Den Teil so verändern, das der <DIR>-Name nicht ausgegeben wird, sondern
verglichen und ggf. gespeichert wird.Und wie nwp3 auch bereits richtig angemerkt hat muss man natürlich festlegen
was der "letzte" Ordner sein soll. Also also alphabetische Sortierung, oder
nach Datum oder nach Dateisystem Reihenfolge ?
-
hi merano,
vielen dank erstmal für deinen code. werd ihn mal testen.
hab grad das gefühl, daß ich mich irgendwie nicht deutlich genug ausgedrückt habe. aber da ich lese, daß du "sortieren nach dateisystem reihenfolge" schreibst:
denke mal so ist es korrekt beschrieben.
ich habe ja den dateipfad C:/Benutzer/Dokumente/Ordner/Unterordner
das programm soll jetzt nach meiner idee den von mir angegebenen pfad abfragen so in der art hast du einen ordner? Benutzer => ja und merken
wieder abfrage ordner? Dokumente => ja und merken, vorherigen "vergessen"
wieder abfrage ordner? Ordner => ja und merken, vorherigen "vergessen"
wieder abfrage ordner? Unterordner => ja und merken, vorherigen "vergessen"
wieder abfrage ordner? inhalt sind dateien => ergo nein und vorheriger Unterordner soll in meine datei eingefügt werden.
hoffe das ist verständlich ausgedrückt...vielleicht geht das auch einfacher. werd mich heut nochmal dranmachen.
gruß, der 'loch in den bauch frager'