Prohlížení/výpis souborů v adresáři – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Prohlížení/výpis souborů v adresáři – C / C++ – Fórum – Programujte.comProhlížení/výpis souborů v adresáři – C / C++ – Fórum – Programujte.com

 

Sergei0
Newbie
9. 8. 2009   #1
-
0
-

Zdravím,

Nesetkali jste se někdo s řešením, jak by se dalo číst názvy všech souborů v daném adresáři pro pozdější zpracování?
Např. mám ve složce s programem soubor abc.txt a jak programově přítomnost tohoto souboru vysledovat?

Byli mi doporučené některé postupy, ovšem jejich užití bylo neúspěšné:

1) pomocí multiplatformních knihoven Boost rozšířujících C++, zde byl problém, že mi Linker vyjel při překladu chybu:

LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc80-mt-gd-1_39.lib'
, což by mohlo jít o jinou verzi boostu a překladače..těžko říct

2) pomocí knihovny dirent.h, která ovšem není podporována v prostředí Visual studio 2005


Jelikož čtení obsahu složky by mělo patřit mezi základní operace, které se hojně využívají, věřím, že se někdo z Vás s řešením tohoto problému již setkal.
Předem díky za náměty a reakce.

Nahlásit jako SPAM
IP: 62.129.41.–
KIIV
~ Moderátor
+43
God of flame
9. 8. 2009   #2
-
0
-

dirent.h se da sehnat i pro visual studio.. akorat s tim bude problem pokud to budes chtit kompilovat i jinde.. nebo by se dalo prihodit k projektu a includovat jako #include "dirent.h" ale funkci sem netestoval.. nemam VS ..
jo a minGW ma dirent.. tj. to musi mit i Dev-C++

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Sergei0
Newbie
9. 8. 2009   #3
-
0
-

To KIIV : V prostředí Dev-C++ 4.9.9.2 to jde, ale ve VS 2005 ne. Mě se ovšem prostředí VS 2005 líbí a chci pracovat právě v něm. To snad není jiné řešení za použití základních knihoven C++? Kdyžtak zkus rozepsat, co přesně se myslí pod tím "sehnat knihovnu pro VS", nemám ani páru co konkrétně bych sháněl... Nějakou aplikaci, která VS rozšiřuje? Nebo jen hlavičkový soubor, který bych tam uměle nacpal?

Nahlásit jako SPAM
IP: 62.129.41.–
KIIV
~ Moderátor
+43
God of flame
9. 8. 2009   #4
-
0
-

google: visual studio dirent.h -> http://www.softagalleria.net/dirent.php

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondra.holub+1
Stálý člen
9. 8. 2009   #5
-
0
-

To Sergei : No pokud linker napsal tuto hlášku, tak nejspíš nenašel zmiňovanou knihovnu. Takže chybělo jenom přidat ji do cest, kde má linker knihovny hledat. I když s VS nepracuji, tak to tam určitě jde.

Nahlásit jako SPAM
IP: 85.207.23.–
Sergei0
Newbie
9. 8. 2009   #6
-
0
-

To ondra.holub : Knihovna přidána byla, ale jak jsem již psal zřejmě jde o verzi pro jiný překládač.

Nahlásit jako SPAM
IP: 62.129.41.–
Sergei0
Newbie
9. 8. 2009   #7
-
0
-

To KIIV : Výborně, knihovna už ve VS funguje .. problém se zdá být vyřešen.

Díky
Sergei.

Nahlásit jako SPAM
IP: 62.129.41.–
Sergei0
Newbie
11. 8. 2009   #8
-
0
-

Zdá se, že kosa opět narazila na kámen. Mám problém s modifikací tohoto kódu:

#include <stdio.h>

#include <dirent.h>
#include <iostream>
using namespace std;

void dir(char *path){ //cteni adresare
DIR *dp;

struct dirent *dirp;

dp = opendir(path);

while (dirp = readdir(dp))
printf("%s \n", dirp->d_name);

closedir(dp);
} //konec cteni adresare

int main() {

dir(".");

return 0;
}


Konkrétně, že nevím, jak udělat, aby místo vypisování na obrazovku (printf ....) mi ukládal hodnoty do nějakého pole... Nepozdává se mi ani samotná deklarace struktůry dirent a tudíž mám problém si tam přidat nějakou další proměnnou!
To je tak, když člověk používá nějaké další knihovní funkce o kterých ví prd :D
Nějaké nápady?

Nahlásit jako SPAM
IP: 62.129.41.–
ondra.holub+1
Stálý člen
11. 8. 2009   #9
-
0
-

#include <cstdio>

#include <dirent.h>
#include <vector>
#include <string>

// toto je tu na nic: #include <iostream>

typedef
std::vector<std::string> svec;

svec dir(const char *path)
{
DIR *dp;

svec res;

struct dirent *dirp;

dp = opendir(path);

while (dirp = readdir(dp))
res.push_back(dirp->d_name);

closedir(dp);
return res;
} //konec cteni adresare

int main() {

svec v = dir(".");
// A ted je to ve vektoru v

const svec::const_iterator end = v.end();
for (svec::const_iterator it = v.begin(); it != end; ++it)
printf("%s\n", it->c_str());
}

Nahlásit jako SPAM
IP: 89.203.160.–
KIIV
~ Moderátor
+43
God of flame
11. 8. 2009   #10
-
0
-

push_back potrebuje string a ty davas char *
musis to nejprve prevest na ten string.. tady asi automaticka konverze moc fungovat nebude..

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondra.holub+1
Stálý člen
11. 8. 2009   #11
-
0
-

To KIIV : Tak si to zkus přeložit. std::string má konstruktor s jedním parametrem typu const char*, takže se jedná o jednu implicitní konverzi a není důvod, proč by to nefungovalo.

Nahlásit jako SPAM
IP: 89.203.160.–
KIIV
~ Moderátor
+43
God of flame
11. 8. 2009   #12
-
0
-

To ondra.holub : aha sorry sem se prekoukl a myslel ze zrovna to nefungovalo

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 70 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý