none
Problema con un programma RRS feed

  • Domanda

  • Rieccomi di nuovo qui a rompervi con un altro problema :D

    Stavo finendo il mio programma quando mi trovo davanti a un problema che so essere stupido ma che non so risolvere.

    Questo è il pezzo di codice:

    const string CartellaFotografo5 = @"D:\Documenti\Marco\" ;
                string DirectoryName = DateTime.Now.ToString("dd.MM.yyyy Ore HH.mm.ss");
                Directory.CreateDirectory(CartellaFotografo5 + DirectoryName);

    Come faccio a fare in modo che la destinazione di "CartellaFotografo5" la posso modificare io da un file txt? Senza ogni volta andare a modificarla da codice ovviamente.


    venerdì 2 agosto 2013 12:27

Risposte

  • Supponiamo che il tuo file delle opzioni si chiami "opzioni.txt", e che si trovi nella stessa cartella del tuo eseguibile.

    Supponiamo inoltre che esso sia composto da un'unica riga, contenente il percorso con cui valorizzare la tua variabile CartellaFotografo5.

    Il codice diventa:

                StreamReader sR = new StreamReader(Application.StartupPath + "\opzioni.txt");
                String CartellaFotografo5 = sR.ReadLine();
                sR.Close();

    Occhio che lo StreamReader è dichiarato nel namespace System.IO, che dovrai indicare.


    Emiliano Musso

    • Proposto come risposta Irina Turcu lunedì 5 agosto 2013 09:01
    • Contrassegnato come risposta Irina Turcu martedì 6 agosto 2013 12:08
    venerdì 2 agosto 2013 12:52

Tutte le risposte

  • Supponiamo che il tuo file delle opzioni si chiami "opzioni.txt", e che si trovi nella stessa cartella del tuo eseguibile.

    Supponiamo inoltre che esso sia composto da un'unica riga, contenente il percorso con cui valorizzare la tua variabile CartellaFotografo5.

    Il codice diventa:

                StreamReader sR = new StreamReader(Application.StartupPath + "\opzioni.txt");
                String CartellaFotografo5 = sR.ReadLine();
                sR.Close();

    Occhio che lo StreamReader è dichiarato nel namespace System.IO, che dovrai indicare.


    Emiliano Musso

    • Proposto come risposta Irina Turcu lunedì 5 agosto 2013 09:01
    • Contrassegnato come risposta Irina Turcu martedì 6 agosto 2013 12:08
    venerdì 2 agosto 2013 12:52
  • Supponiamo che il tuo file delle opzioni si chiami "opzioni.txt", e che si trovi nella stessa cartella del tuo eseguibile.

    Supponiamo inoltre che esso sia composto da un'unica riga, contenente il percorso con cui valorizzare la tua variabile CartellaFotografo5.

    Il codice diventa:

                StreamReader sR = new StreamReader(Application.StartupPath + "\opzioni.txt");
                String CartellaFotografo5 = sR.ReadLine();
                sR.Close();

    Occhio che lo StreamReader è dichiarato nel namespace System.IO, che dovrai indicare.


    Emiliano Musso

    No non intendevo quello... Quello che io devo fare è far in modo che in un file txt posso scrivere ad esempio:

    @"D:\Documenti\Marco\"

    In modo che io quando voglio senza andare nel codice posso cambiare la cartella di destinazione dove andrà creata poi la cartella tramite questo codice:

    string DirectoryName = DateTime.Now.ToString("dd.MM.yyyy Ore HH.mm.ss");
                Directory.CreateDirectory(CartellaFotografo5 + DirectoryName);

    Spiegando meglio:

    Io apro il file txt, nella prima riga scrivo ad esempio --> D:\Documenti\Pippo\   e quello che ho scritto me lo va a sostituire nel codice come ad esempio:

    const string CartellaFotografo5 = cartella5.txt"; dove in "cartella5.txt" è contenuta la riga "D:\Documenti\Pippo\ (so per certo che questo pezzo di codice non funziona ma è giusto per farvi capire)


    venerdì 2 agosto 2013 13:04
  • Infatti il sorgente che ti ho postato fa proprio quello: nel file "opzioni" scrivi "D:\Documenti\Pippo", ed eseguendo questo codice:

    StreamReader sR = new StreamReader(Application.StartupPath + "\opzioni.txt");
    String CartellaFotografo5 = sR.ReadLine();
    sR.Close();
    string DirectoryName = DateTime.Now.ToString("dd.MM.yyyy Ore HH.mm.ss");
    Directory.CreateDirectory(CartellaFotografo5 + DirectoryName);

    ti troverai, sotto la cartella indicata nel file TXT, la nuova directory creata in base al timestamp. Ovviamente questo è un discorso legato al runtime del programma: non puoi automatizzare la modifica del codice sorgente, puoi solo fare in modo che quella stessa logica sia utilizzata mentre il programma è in esecuzione.


    Emiliano Musso

    venerdì 2 agosto 2013 13:30
  • Forse ci sono, però rimangono due problemi:

    1) Dove metto il file "opzioni.txt"?

    2) Perchè dopo aver inserito la riga di codice

    StreamReader sR = new StreamReader(Application.StartupPath + "\opzioni.txt");

    Mi da questo errore? <<Sequenza di escape non riconosciuta>>

    Grazie comunque per tutto l'aiuto che mi stai dando :)

    giovedì 8 agosto 2013 09:16
  • Ciao Marco,

    come vedi, nel dichiarare il nuovo StreamReader andiamo a dirgli di aprire il file opzioni.txt preceduto da Application.StartupPath. Tale proprietà del namespace Application rappresenta, in sostanza, il percorso di riferimento dell'eseguibile.

    Se lanci il programma da IDE (ovvero direttamente da Visual Studio), tale cartella è rappresentata dalla sottodirectory "bin/Debug" o "bin/Release" del tuo progetto (a seconda di quale tipologia di compilazione stai eseguendo. Quando poi installerai il tuo programma, tale direcotry sarà sempre quella in cui è presente il tuo exe.

    In ultimo, l'errore di sequenza di escape non riconosciuta credo ta la dia perché, prima della stringa "opzioni.txt" c'è un solo slash (che, in C, rappresenta sempre un carattere speciale, tipo "\t" per la tabulazione). In questo caso, l'escape "\o" non esiste, ed ecco quindi l'errore. Lo si aggira facilmente con un doppio slash, in questo modo:

    StreamReader sR = new StreamReader(Application.StartupPath + "\\opzioni.txt");

    Fammi sapere se è tutto ok.


    Emiliano Musso

    giovedì 8 agosto 2013 10:21
  • Tutto perfetto Emiliano davvero grazie mille :D

    Scusami per il ritardo in risposta ma sono stato un pò impegnato, ma sono riuscito a completare tutto il programma :)

    Ancora grazie mille.

    Alla prossima!

    domenica 18 agosto 2013 09:14
  • Nessun problema, l'importante è che tu abbia risolto.

    Alla prossima


    Emiliano Musso

    domenica 18 agosto 2013 10:18