PDA

Visualizza la versione completa : [C] Nome della Dir correntemente in uso con getcwd ()


Elmapomap
21-06-2010, 00:04
Ho bisogno di prendere come da titolo il nome della dir in cui è il file, quindi il nome della dir corrente.

Cercando sul web ho trovato http://tinyurl.com/2fa5u5h che spiega 3 funzioni.

Ebbene mettendomi al lavoro sono riuscito a ricavare che :
Codice:


char*getcwd(char *buf, size_t size);

funziona ma non so come utilizzare questa funzione quindi averne l'output e quel che restituisce.

ho provato anche a mettere in una variabile cosi:
Codice:

char myvar = getcwd(char *buf, size_t size);

ma non và.

Qualcuno saprebbe dirmi come utilizzare questa funzione ed eventualmente metterla in una variabile?

oregon
21-06-2010, 00:11
Devi passare un buffer di caratteri e la sua dimensione alla funzione ... da quello che hai scritto sembra che tu non conosca completamente il C ...

P.S. Lavori con Linux?

Elmapomap
21-06-2010, 00:14
Originariamente inviato da oregon
Devi passare un buffer di caratteri e la sua dimensione alla funzione ... da quello che hai scritto sembra che tu non conosca completamente il C ...

P.S. Lavori con Linux?
Purtroppo non posso darti torto.

Buffer di caratteri? ovvero? :mame:
E poi la dimensione di cosa? Itendi della dir o del buffer? e se del buffer come la ricavo? :( :cry:

oregon
21-06-2010, 00:17
La devi indicare tu ... puoi usare una costante già dichiarata, ad esempio, PATH_MAX



char buffer[PATH_MAX];
getcwd(buffer, PATH_MAX);


per avere quello che cerchi in buffer

Ma se non hai idea di come scrivere codice C, ti fermerai al prossimo problema ...

Elmapomap
21-06-2010, 16:42
Originariamente inviato da oregon
La devi indicare tu ... puoi usare una costante già dichiarata, ad esempio, PATH_MAX



char buffer[PATH_MAX];
getcwd(buffer, PATH_MAX);


per avere quello che cerchi in buffer

Ma se non hai idea di come scrivere codice C, ti fermerai al prossimo problema ...

Ciao alla fine ho risolto questo problema ma come hai detto mi sono giù bloccato.

Per non aprire altri topic (i miei problemi sono tanti, e non credo sia una buona idea intasare la sezione C) preferisco continuare qui.

In realtà sto costruendo un piccolo programmino che apre la directory in cui è eseguito e ne apre tutte le sottostanti (all'infinito quindi per ogni sub dir) e infine partendo dall'ultima ne cancella tutto ciò che è dentro fino alla dir principale di partenza!.

Quindi chi si rompe di aiutarmi in quest'impresa.. beh.. :) le rotture sono consetite :fagiano:

Ovviamente io voglio solo dritte e non la pappa pronta, anche perchè non può giovarmi la pappa pronta!.

Ora ho scritto una parte del codice che andrà ultimandosi pian piano.

Ci sono 2 errori penso:

come primo partendo dalla linea 41 a 47 non riesco a mettere in un array i risultati di dir_object->d_name (analogamente da 55 a 61)

come secondo errore non riesco a mettere gli ipotetici array all_dir e all_files in un solo array ed il debug dà questi errori:

Alla linea 66: error: size of array `all' has non-integral type `char*[100]'
Alla linea 68: error: invalid conversion from `char (*)[1]' to `char'

Il codice : http://nopaste.info/a64c6f7e8f.html

Se avete soluzioni vi ringrazio :D

simo_us
21-06-2010, 18:17
Scusa ma programmi con Linux o con Windows?
Perchè dal tuo codice includi l'header unistd.h e alla fine del main chiami system("PAUSE");
Magari poi sono io che non so che in win è possibile questo dettaglio... :spy:

In piu non puoi fare delle cose cosi:


char *all_files[100];
char *all_dir[100];

e poi dichiarare un array in questa maniera:

char all[all_dir][all_files] ;
E poi le variabili si dichiarano all'inizio della funzione, non alla fine..

Elmapomap
21-06-2010, 18:20
programmo su windows.. cmq hai soluzioni a i miei problemi?

simo_us
21-06-2010, 18:31
EDIT:

char all[100][100];

http://www.tenouk.com/cnwin32tutorials.html

oregon
21-06-2010, 18:50
Progammi con Windows?

E perchè mai utilizzi funzioni di Unix/Linux ? :confused: :confused:

Elmapomap
21-06-2010, 18:56
scusa ma anche se metto


char all[100][100];
all = [all_files][all_dir];

Il debug da errore a all = [all_files][all_dir]; quindi non so come fare..

Per di più i cicli for di K sono fatti bene? a me non sembrerebbe...

E c'è ancora il problema del return non risolto

Loading