PROBLEMA Problema codice c#

TheLastViper

Nuovo Utente
8
2
Hardware Utente
CPU
Intel core i5 - 4590
Scheda Madre
ASUS H81I-PLUS
Hard Disk
SSD 120/128 GB SATA
RAM
DDR3-1600 DIMM 8GB
Scheda Video
KFA Geforce GTX 1060 OC
Scheda Audio
Logitech 5.1 Sound system 75W
Monitor
24"(60.9 cm) Full HD monitor gaming
Periferiche
Wireless keyboard with touchpad + Logitech G29 steering wheel/pedal set
Internet
Fastweb ADSL2+ 20Mb
Sistema Operativo
Windows 10
Ciao ragazzi

Sto avendo un problema nel funzionamento di questo codice:
C#:
private void Button11_Click(object sender, EventArgs e)
        {
            int i = 1;
            string C = "0";
            PATH = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $@"\RALLYCARS\rallycar.txt";
            PATH_2 = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $@"\RALLYCARS\options\counter.txt";
            File.ReadAllText(PATH_2);
            // File.Close();
            if (File.Exists(PATH) == true)
            {
                PATH = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $@"\RALLYCARS\rallycar{i}.txt";
                File.Create(PATH);
                i++;
                C = Convert.ToString(i);
                File.ReadAllText(PATH_2);
                C.Replace(C, C);
            }
            else
            {
                File.Create(PATH);
            }
            if (C == "0")
            {
                File.WriteAllText(PATH_2, "0");
            }
            MessageBox.Show("CONFIGURATION SENT!", "SENT!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
Praticamente esso dovrebbe creare un file di testo la prima volta che viene clickato il button, poi verifica se giá esiste ed in tal caso ne crea uno nuovo aggiungendo un indice alla fine del nome del file. Questo indice viene memorizzato in un altro file di testo, ha una base di partenza che é uguale a "0" e che viene aggiornata ogni volta alla fine dell'esecuzione del codice del button in questione grazie ad una variabile di appoggio, in modo da incrementarsi. Questo file viene letto ogni volta che viene aperto il pulsante, cosí che poi io dovró assegnare all'indice i il valore attualmente memorizzato sul file di testo. Purtroppo, peró, il button riesce solo a creare la prima volta il file originale ed un nuovo file con un indice "1" alla fine del nome del file, forse perché il valore dell'indice non viene mai aggiornato sul file di appoggio, che continua a contenere sempre il valore originale, cioé "0". Potete aiutarmi? Grazie in anticipo :)
Post automaticamente unito:

UPDATE - Sono riuscito a correggere l'errore descritto in precedenza ma ora ne sorge un altro nel seguente codice:

C#:
 private void Button11_Click(object sender, EventArgs e)
        {
            int i = 0;
            string tmp = "";
            if (checkDir() == false)
            {
                checkDir();
            }
            PATH = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $@"\RALLYCARS\rallycar.txt";
            PATH_2 = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $@"\RALLYCARS\options\counter.txt";
            tmp = File.ReadAllText(PATH_2);
            if (tmp != "")
                i = Convert.ToInt16(tmp);
            if (File.Exists(PATH) == true)
            {
                i++;
                PATH = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $@"\RALLYCARS\rallycar{i}.txt";
                File.WriteAllText(PATH, $"CAR SPECS: " +
                    $"MANUFACTURER: {textBox1.Text}; " +
                    $"MODEL: {textBox2.Text}; " +
                    $"HP: {textBox3.Text}; " +
                    $"CC: {textBox4.Text}; " +
                    $"TORQUE: {textBox5.Text}; " +
                    $"WEIGHT: {textBox6.Text}; " +
                    $"LENGHT: {textBox7.Text}; " +
                    $"WIDTH: {textBox8.Text}; " +
                    $"HEIGHT: {textBox9.Text}; " +
                    $"N. O. C. S.: {textBox10.Text}.");
                File.WriteAllText(PATH_2, i.ToString());
            }
            else
            {
                File.WriteAllText(PATH, $"CAR SPECS: " +
                    $"MANUFACTURER: {textBox1.Text}; " +
                    $"MODEL: {textBox2.Text}; " +
                    $"HP: {textBox3.Text}; " +
                    $"CC: {textBox4.Text}; " +
                    $"TORQUE: {textBox5.Text}; " +
                    $"WEIGHT: {textBox6.Text}; " +
                    $"LENGHT: {textBox7.Text}; " +
                    $"WIDTH: {textBox8.Text}; " +
                    $"HEIGHT: {textBox9.Text}; " +
                    $"N. O. C. S.: {textBox10.Text}.");
            }
        }

        private bool checkDir()
        {
            if (Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $@"\RALLYCARS\options"))
            {
                MessageBox.Show("CONFIGURATION SENT!", "SENT!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return true;
            }
            else
            {
                object DIR = Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + $@"\RALLYCARS\options");
                string PATH_X = DIR.ToString();
                File.Create(PATH_X + $@"\counter.txt");
                return false;
            }
        }
In pratica io vorrei che il programma controlli l'esistenza del percorso e, se non esiste, lo crei. Purtroppo non riesco a far funzionare questa casistica. Grazie ancora in anticipo per l'aiuto che mi darete.
 
Ultima modifica:

Andretti60

Utente Èlite
3,226
2,100
Hardware Utente
Un po' difficile seguire il tuo codice. Quello che fai e' pero' pericoloso, ma affidare un contatore in un file, se qualcosa va storto e' facile che questi contatori vadano persi e quindi tutti i tuoi dati risultino corrotti.
La migliore cosa da fare e' enumerare tutti i file nella tua cartella che inizino con "rallycar", trovo il contatore piu' grande (per esempio rallycar235.txt -> 235, incrementi di uno per creare un nuovo file.
Per enumerare i files, usa semplicemente Directory.Enumerate("blah-blah-blah\rallycar*.txt")
 
  • Mi piace
Reactions: TheLastViper

TheLastViper

Nuovo Utente
8
2
Hardware Utente
CPU
Intel core i5 - 4590
Scheda Madre
ASUS H81I-PLUS
Hard Disk
SSD 120/128 GB SATA
RAM
DDR3-1600 DIMM 8GB
Scheda Video
KFA Geforce GTX 1060 OC
Scheda Audio
Logitech 5.1 Sound system 75W
Monitor
24"(60.9 cm) Full HD monitor gaming
Periferiche
Wireless keyboard with touchpad + Logitech G29 steering wheel/pedal set
Internet
Fastweb ADSL2+ 20Mb
Sistema Operativo
Windows 10
La migliore cosa da fare e' enumerare tutti i file nella tua cartella che inizino con "rallycar", trovo il contatore piu' grande (per esempio rallycar235.txt -> 235, incrementi di uno per creare un nuovo file.
Per enumerare i files, usa semplicemente Directory.Enumerate("blah-blah-blah\rallycar*.txt")
Grazie per la risposta, ho capito cosa intendi. E invece, per verificare l'esistenza di un path e, se non esiste, crearlo da zero come posso fare? Grazie ancora :)

Un po' difficile seguire il tuo codice.
Dov'é esattamente che trovi difficoltá nella comprensione del mio codice? Cosí capisco cosa cambiare

Quello che fai e' pero' pericoloso, ma affidare un contatore in un file, se qualcosa va storto e' facile che questi contatori vadano persi e quindi tutti i tuoi dati risultino corrotti.
Ok, chiaro, non avevo pensato a questa eventualitá.
 
Ultima modifica:

Andretti60

Utente Èlite
3,226
2,100
Hardware Utente
Grazie per la risposta, ho capito cosa intendi. E invece, per verificare l'esistenza di un path e, se non esiste, crearlo da zero come posso fare? Grazie ancora :)
Mi pare che lo stai facendo nella funzione checkDir(), usando la classe statica Directory

Dov'é esattamente che trovi difficoltá nella comprensione del mio codice? Cosí capisco cosa cambiare
Principalmente nel nome delle variabili, difficile capire cosa sia una variabile che chiami C e variabili che non sono definite nel codice pubblicato (tipo PATH e PATH2). Chiamare una variabile semplicemente aggiungendo un numero alla fine di una variabile gia' esistente non aiuta molto. Non sono un "talebano" per in nomi delle variabili, ma devono avere almeno un qualche senso altrimenti dopo un po' di tempo diventono incomprensibili anche per chi avesse scritto il codice (credimi, ci sono passato). Ho scritto una guida a riguardo, la trovi citata in uno dei post in rilievo.
 

Entra

oppure Accedi utilizzando