Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C] Creare un file nella directory locale

    Devo creare un file e devo essere "sicuro" che venga creato nella directory dove si trova l'eseguibile...

    Ho notato che questo nn avviene sempre e cmq...

    C'è un modo di crearlo nella directory voluta???

    Tipo quando faccio


    log = fopen("log.txt","a+");

    Prima di log.txt che devo mettere come directory corrente???



    Es.

    Sto in c:\prova\
    il file di log deve essere creato li
    sto in c:\prova\prova1\
    il file di log deve essere creato nella sottodirectory...

    Penso che sia una scemenza ma nn so che metterci!!!
    Linguaggi : C/C++
    SO: WinXP, Slack 10

  2. #2

    + precisaente

    Come faccio a definire il path in modo dinamico???
    Linguaggi : C/C++
    SO: WinXP, Slack 10

  3. #3
    in argv[0] è sempre presente il patch assoluto all'eseguibile (compreso il nome dell'eseguibile)

    quindi, basta togliere il nome di quest'ultimo dal patch,
    e sostituirlo con il nome del file da creare.

    es: se il patch all'eseguibile è:
    C:\Documenti\mioeseguibile.exe
    basta sostituire "mioeseguibile.exe"
    con il nome del file da creare.
    C:\Documenti\mionuovofile.txt
    codice:
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char **argv)
    {
        char fname[20], i, len;
        FILE *p;
        
        len=strlen(argv[0]);
        
        for(i=len; i>0; i--)
            if(argv[0][i]=='\\\') 
            {
                argv[0][++i]='\0';
                break;                        
            }    
        
        printf("Inserisci il nome del file da creare: ");
        scanf("%s", fname);
        strcat(argv[0], fname);
    
        p=fopen(argv[0], "w");
        fclose(p);
        
        return 0;
    }
    ...Terrible warlords, good warlords, and an english song

  4. #4
    codice:
       if((log=fopen("log.txt","a")) == NULL){
          printf("Impossibile creare il file di log\n");
          getchar();
          exit(1);
          }

    Trovi che dovrebbe creare il file nella directory dove si trova l'exe???

    Come mai fa così???
    Linguaggi : C/C++
    SO: WinXP, Slack 10

  5. #5
    Originariamente inviato da Habdul
    codice:
       if((log=fopen("log.txt","a")) == NULL){
          printf("Impossibile creare il file di log\n");
          getchar();
          exit(1);
          }

    Trovi che dovrebbe creare il file nella directory dove si trova l'exe???

    Come mai fa così???
    Il tuo codice (questo quotato), controlla soltanto se è possiile
    creare il file (se possibile lo crea), altrimenti invia a video un messaggio di errore ed esce dal programma.

    Il codice che ti ho postato sopra fa esattamente quello che hai chiesto.

    alla posizione "0" della variabile "speciale" *argv[]
    è presente il patch assoluto all'eseguibile che stai eseguendo.

    Quindi, per creare un file nella directory in cui si trova l'eseguibile, basta modificare la stringa presente in *argv[0]

    sostituendo il nome dell'eseguibile .exe
    con il nome del file da creare, il gioco è fatto.

    per fare un test, prova a mettere delle printf() prima e dopo la routine... così visualizzi a video la striga presente in *argv[0]
    prima e dopo la modifica... tale stringa verrà successivamente
    passata a fopen() per creare il file nella stessa directory dell'eseguibile.
    ...Terrible warlords, good warlords, and an english song

  6. #6
    Funziona!!

    Grazie!!!

    Il fatto che fare così è un po' macchinoso, mi creo un funz mia che maschera tutto e sperimo che il prof. nn dica niente!!!
    Linguaggi : C/C++
    SO: WinXP, Slack 10

  7. #7
    In effetti, io non ho problemi se utilizzo il seguente codice:
    codice:
    #include <stdio.h>
    
    int main()
    {
        FILE *p;
        p=fopen(".\\pippo.txt", "w");
        fclose(p);
        return 0;
    }
    In questo modo, viene creato un file "pippo.txt"
    nella directory in cui risiede il file eseguibile.exe.
    Sia se lanciato da ambiente, sia se lanciato con doppio click.
    P.S. compilato con Dev C++
    ...Terrible warlords, good warlords, and an english song

  8. #8
    Scusa ma che sistema operativo hai???

    Io WinXp Home!!!

    Nn è che la tecnologia NT rompe???
    Linguaggi : C/C++
    SO: WinXP, Slack 10

  9. #9

    Che cosa strana...

    Ho provato a far partire il programma da riga di comando (come è giusto che parta) e funziona benissimo!!!

    Ma se c trascino sopra i file (modo Win) niente, il file log.txt viene inserito nella cartella Doc and setting!!! Bha!!!

    Mistero della fede!!! :zamm:
    Linguaggi : C/C++
    SO: WinXP, Slack 10

  10. #10
    Originariamente inviato da Habdul
    Scusa ma che sistema operativo hai???

    Io WinXp Home!!!

    Nn è che la tecnologia NT rompe???
    Non direi proprio! Ho Windows XP professional e non mi crea alcun problema ne da riga di comando, ne da interfaccia grafica (doppio click sopra all'eseguibile) Il file log.txt viene in entrambi i casi creato nella directory in cui si trova il file eseguibile.
    ...Terrible warlords, good warlords, and an english song

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.