Visualizzazione risultati 1 fino 15 di 15

Discussione: [c] creare file in un'altra directory

  1. #1
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,672

    Predefinito [c] creare file in un'altra directory

    Salve.

    Dopo ricerce su google e sul forum, non ho trovato una risposta.

    Per capirci, vorrei fare una cosa del "tipo":

    Codice:
    #include <stdio.h>
    
    int main()
    {
        FILE *a;
        a=fopen("C:/ciao.txt", "w");
        fflush(a);
        fclose(a);
        return 0;
    }
    Ovvero creare un file non dove risiede il programma, ma in un altra directory.

    p.s. mi servirebbero anche (se possibile) delle directory non assolute (ad esempio, la cartella programmi, la cartella temp, la cartella desktop... (ad esempio, che possa usare anche cose tipo %systemroot%...))

    Grazie!

    CIAO!

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Se hai solo a che fare con cartelle relative, ti dovrebbe bastare specificare il percorso del file esattamente come fai per i collegamenti HTML (qui il riassuntino delle regole base).

    Ma non saprei dirti come sfruttare le variabili d'ambiente del sistema operativo (anche perché così avresti un programma compilabile solo sotto Windows... C invece è scritto per essere multipiattaforma).

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,672

    Predefinito

    Grazie,

    Citazione Originalmente inviato da dementialsite Visualizza messaggio
    Se hai solo a che fare con cartelle relative, ti dovrebbe bastare specificare il percorso del file esattamente come fai per i collegamenti HTML (qui il riassuntino delle regole base).
    Scusa, ma non ho capito a cosa serve il link... (FORSE) dovrebbe esistere una funzione che faccia questo, no?? Qual'è ??
    Ma non saprei dirti come sfruttare le variabili d'ambiente del sistema operativo (anche perché così avresti un programma compilabile solo sotto Windows... C invece è scritto per essere multipiattaforma).
    ...Giusto !... ma a me (per adesso) basta windows !!... e poi in linux (o altre piattaforme) le ditectory sono uguali?? {cioé: anche in altre piattaforme la directory: "c:\ciao\" esiste? o sono espresse in modo diverso??}

    Grazie,

    CIAO!

  4. #4
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    su un sistema Unix non esiste il concetto di unità disco

    i percorsi invece di inizare con C:\, ad esempio, iniziano tutti con /

    ti consiglierei l'uso di path relativi (quelli che iniziano per ./ o ../ ovvero directory locale e superiore)

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Scusa, ma non ho capito a cosa serve il link... ...
    Intendevo semplicemente ricordarti le regole per i percorsi relativi, come suggerito da AlexKidd... e visto che sono le stesse che si usano in HTML (né più, né meno), ti ho messo il link invece di riscriverle da zero: devi soltanto specificare il nome del file da aprire (funzione fopen) in questo modo.

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,672

    Predefinito

    Grazie (a tutti e 2) per l'informazione di "./" e "../" ... sinceramente non lo sapevo ed è una cosa molto utile...

    Ma credo che il mio problema non sia questo: il mio problema è che la fopen crea un file NELLA STESSA DIRECTORY DEL PROGRAMMA.
    Come faccio a cambiare directory ??

    p.s. una cosa come

    Codice:
    #include <stdio.h>
    
    int main()
    {
        FILE *a;
        a=fopen("C:\ciao.txt", "w");
        fflush(a);
        fclose(a);
        return 0;
    }
    Non mi funziona!

    e poi non funziona nemmeno:

    Codice:
    ...
    a=fopen("prova\ciao.txt", "w");
    ...
    (mi crea un file nella directory del programma che si chiama provaciao.txt)

    ...Da questo intuisco che con la funzione fopen non posso creare un file in un'altra directory ....

    Come posso fare?

    (se fopen non va bene)
    Che funzione dovrei usare??

    Grazie!
    Ultima modifica di alemoppo : 31-01-2009 alle ore 17.43.38

  7. #7
    Guest

    Predefinito

    devi mettere un backslash
    Codice:
    a=fopen("prova\\ciao.txt", "w");

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,672

    Predefinito

    Già... è una stringa --> con un '\' viene riconosciuto come '\c' , no? {sequenza escape}


    ..grazie: come al solito risposta secca ed efficace !!

    p.s. la cartella non la crea in automatico ...

    comunque il problema è risolto

    GRAZIE A TUTTI !

    EDIT:

    Citazione Originalmente inviato da AlexKidd Visualizza messaggio
    ti consiglierei l'uso di path relativi (quelli che iniziano per ./ o ../ ovvero directory locale e superiore)
    ../ -->superiore

    ./ --> ??

    Cosa fa './' ??
    Cosa si intende per 'locale' ?

    Grazie!
    Ultima modifica di alemoppo : 31-01-2009 alle ore 22.17.24

  9. #9
    Guest

    Predefinito

    locale ovvero corrente, quella dell'exe insomma. ../ è quella superiore .

  10. #10
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,672

    Predefinito

    ah, ok.
    ma a cosa serve visto che se non metto niente funziona uguale?
    -è inutile ...

    Altre variabili relative utilizzabili?? (ho cercato su google, ma...)
    [ad esempio la cartella programmi oppure la cartella desktop, oppure la temp, oppure quella principale (dell'unità corrente: es. c:\)...].

    Grazie!

    EDIT:

    Ad esempio %systemroot%, ma non funziona. Ho provato anche con %%systemroot%%...
    Ultima modifica di alemoppo : 01-02-2009 alle ore 00.08.00

  11. #11
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    il fatto che funzioni anche senza vale solo se lanci l'eseguibile dalla directory locale

    se ad esempio lanci l'eseguibile da una directory superiore e non specifichi ./ , il file verrà creato nella directory superiore

    non conosco cosi a fondo windows.... però so che "%" in una stringa è un carattere speciale (vedi il suo uso in scanf() e printf()) prova quindi a usare "\%"
    Ultima modifica di AlexKidd : 01-02-2009 alle ore 01.17.46

  12. #12
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,672

    Predefinito

    Citazione Originalmente inviato da AlexKidd Visualizza messaggio
    se ad esempio lanci l'eseguibile da una directory superiore e non specifichi ./ , il file verrà creato nella directory superiore
    ...Altrimenti, (con ./) dove viene creato ??

    Da quel che ho capito, viene creato in locale ovvero DOVE RISIEDE L'ESEGUIBILE:
    locale ovvero corrente, quella dell'exe insomma
    Ad esempio, se ho una cartella chiamata "1" che contiene la cartella "2" { "2" dentro "1"} e l'eseguibile si trova nella "2":

    con "./prova.txt" -->viene creato nella "2".
    con "prova.txt" -->viene creato nella "2".

    ...quindi? a cosa serve "./" ??

    Grazie!

  13. #13
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Il "punto slash" significa, come detto sopra, "nella stessa cartella dell'eseguibile".

    Se vuoi saperlo, è stato inserito per questo motivo: se provi a compilare il tuo programma sotto Linux, e provi a lanciarlo come fai in Windows (ovvero, scrivendo nel prompt solo il nome del tuo eseguibile), ti verrà risposto qualcosa tipo "comando non trovato". Questo perché il tuo "comando" molto probabilmente non si trova nella shell predefinita, che, diversamente da Windows, non comprende (di default) la cartella corrente. Sotto Linux per lanciare il tuo comando devi per forza scrivere "punto slash", seguito dal nome del tuo eseguibile... solo in questo modo il programma viene lanciato.

    Nel tuo programma, tuttavia, inserire o meno il "punto slash" non comporta differenze, come hai potuto constatare da te...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  14. #14
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    prova a posizionarti in C:\ ed esegui il programma digitando l'intero path... noterai la differenza

  15. #15
    Guest

    Predefinito

    La cartella non viene creata in automatico... Dai un'occhiata a mkdir()

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •