Ahoj, potřebuju napsat program, který mi projde celý disk/složku, kterou mu zadám a vypíše cesty (a názvy) k jednotlivým souborům. Jak by jste toto řešili vy? Nějak mě totiž nenapadá žádné řešení a ani strýček Google moc nepomohl. :/
Díky. :)
Fórum › C / C++
Jak získat cesty k souborům na disku/ve složce?
Nahlásit jako SPAM
IP: 109.81.208.–Tak jsem "zkuchtil" něco pomocí dirent.h knihovny, ale má přání to nenaplňuje. Projede to jenom aktuální adresář, avšak nemám zdání, jakým způsobem projedu celou adresářovou strukturu tohoto adresáře.
Chtěl bych mít, výstup podobný tady tomuto:
/soubor1.txt
/soubor2.pdf
/soubor3.php
/soubor4.css
/slozka1/soubor5.txt
/slozka1/soubor6.pdf
/slozka1/slozka2/soubor7.php
/slozka1/slozka2/soubor8.css
/slozka1/slozka2/soubor9.js
...
...
...
Můj kód:
#include <iostream>
#include <dirent.h>
using namespace std;
int main() {
DIR *directory = NULL;
struct dirent *dirent = NULL;
directory = opendir("./");
if(directory) {
while(dirent = readdir(directory)) {
cout << dirent->d_name << "\n";
}
closedir(directory);
} else {
cout << "Directory can't be opened.\n";
}
}
Díky. :)
Nahlásit jako SPAM
IP: 109.81.208.–#6 richard.zavodny
https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx
dokumentace je trochu neprehledna ale staci pak srovnat: info.st_mode == _S_IFDIR
Nahlásit jako SPAM
IP: 94.113.99.–Ještě nezapomeň kontrolovat symlinky. Bez toho by se ti mohlo stát, že se ti program zacyklí donekonečna, protože symlink může odkazovat třeba na svůj rodičovský adresář.
Nahlásit jako SPAM
IP: 212.96.189.–#8 ondra.holub
No, to je právě problém, který řeším a absolutně nemám zdání, jak na to.. :/
Můj kód:
#include <iostream>
#include <dirent.h>
using namespace std;
void findFiles(char *directoryName) {
DIR *directory = NULL;
struct dirent *dirent = NULL;
directory = opendir(directoryName);
if(directory) {
while(dirent = readdir(directory)) {
if(dirent->d_type == 0x8) {
cout << "/" << directoryName << "/" << dirent->d_name << "\n";
} else {
findFiles(dirent->d_name);
}
}
closedir(directory);
} else {
cout << "Can't open directory: " << directoryName << "\n";
}
}
int main() {
findFiles(".");
return 0;
}
Nahlásit jako SPAM
IP: 109.81.208.–
#9 richard.zavodny
Zacyklí se ti to, protože procházíš i "." (aktuální adresář) a ".." (nadřazený adresář).
void findFiles(const string & directoryName) {
DIR *directory = NULL;
struct dirent *dirent = NULL;
string entryName;
directory = opendir(directoryName.c_str());
if (directory) {
while (dirent = readdir(directory)) {
entryName = dirent->d_name;
if (entryName == "." || entryName == "..") {
continue;
}
cout << directoryName << "/" << entryName << "\n";
if (dirent->d_type == DT_DIR){
findFiles(directoryName + "/" + entryName);
}
}
closedir(directory);
} else {
cout << "Can't open directory: " << directoryName << "\n";
}
}
Nahlásit jako SPAM
IP: 213.211.51.–Díky moc, všem. Už to funguje podle mého zdání. :)
Kdyby někdo hledal to co já, tak tady je celý kód:
#include <iostream>
#include <dirent.h>
using namespace std;
void findFiles(const string & directoryName) {
DIR *directory = NULL;
struct dirent *dirent = NULL;
string entryName;
directory = opendir(directoryName.c_str());
if(directory) {
while(dirent = readdir(directory)) {
entryName = dirent->d_name;
if(entryName == "." || entryName == "..") {
continue;
} else {
if(dirent->d_type == 0x8) {
cout << directoryName << "/" << entryName << "\n";
} else {
findFiles(directoryName + "/" + entryName);
}
}
}
closedir(directory);
} else {
cout << "Can't open directory: " << directoryName << "\n";
}
}
int main() {
findFiles(".");
return 0;
}
Ještě jednou díky, všem. :)
Nahlásit jako SPAM
IP: 109.81.208.–
Zjistit počet nových příspěvků
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa































Uživatelé prohlížející si toto vlákno
Podobná vlákna
Relativní cesty k souborům — založil Taxmi
Jak ziskat checkboxy — založil Gibon
Jak ziskat udaj z internetu ? — založil dyžon
VB - Jak získat název aplikace — založil Denoy
Jak získat praxi a učit se v IT — založil Radek Hlaváček
Moderátoři diskuze
TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Návštěvník

Věrný člen
God of flame
Stálý člen
Nejlepší odpověď

