C# - Programul nu va suprascrie fișierul text existent

Sistemul meu creează un fișier text la primul clic pe buton al programului și îi adaugă diverse lucruri la alte clicuri pe buton. În mod ideal, totul ar fi salvat totul la sfârșit, dar deoarece este un sistem de monitorizare care utilizează un temporizator, unele dintre date trebuie să fie scrise în fișier la anumite momente, altfel se vor pierde.

La clic pe primul buton (btnStart), programul localizează/creează folderul principal (dau un nume folosind un șir constant) și localizează/creează un subdosar (folosind textul introdus într-o combinație de casete de text înainte de a face clic pe buton). setează directorul pentru fișierul text așa cum se arată mai jos în șir (fileName):

    private void createDirectory()
    { //create output file in this folder using owner name and current date

        //main folder path (contains all files output from system)
        string rootDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Horse Monitoring Records";
        //sub folder path (each patient has individual subfolder)
        string subDirectory = rootDirectory + "\\" + txtPatName.Text + "/" + txtOwnerName.Text;
        //file name (patient has file created for each operation)
        fileName = subDirectory +  "\\" + txtOwnerName.Text + "/(" + DateTime.Now.Date.ToString("dd-MM-yyyy") + ").txt";

        if (!Directory.Exists(rootDirectory)) //if main folder does not exist...
        {
            Directory.CreateDirectory(rootDirectory); //create it in My Documents
        }
        if (!Directory.Exists(subDirectory)) //if patient sub folder does not exist...
        {
            Directory.CreateDirectory(subDirectory); //create it in Patient-Owner format
        }
    }

Următoarea funcție numită scrie primul bit de text în fișier, așa cum se arată:

    private void saveFileDetails()
    {
        //Once case details have been entered, create new file using these details and add data input structure
        StreamWriter consoleFile = new StreamWriter(fileName, true);

        consoleFile.WriteLine("------------------------------------------- Case Details -------------------------------------------");
        consoleFile.WriteLine("\n\n");

        //patient and vet details
        ...
        }

Inițial, când am configurat această funcție, nu am inclus supraîncărcarea „adevărată” la StreamWriter în prima linie a funcției. Acest lucru a condus la o eroare de rulare care mi-a spus că fișierul text nu poate fi deschis, deoarece era deja deschis de un alt proces.

Din moment ce am adăugat supraîncărcarea „adevărată”, sistemul a funcționat bine, dar tocmai am întâmpinat o problemă în sensul că, odată ce un fișier text a fost creat, acesta nu poate fi suprascris așa cum ar fi în mod normal un fișier text de către un StreamWriter care folosește aceeași cale.

Trebuie să pot suprascrie fișierele pe măsură ce devin obselete după o perioadă de timp și trebuie înlocuite, are cineva idee unde pot merge de aici pentru a remedia această problemă?

Mulțumesc, Mark


person marcuthh    schedule 28.06.2015    source sursă


Răspunsuri (1)


Supraîncărcarea StreamWriter care ia un boolean este detaliată aici. true îl face să adauge conținutul. Dacă doriți să înlocuiți întotdeauna fișierul, puteți utiliza File.OpenWrite; Cred că puteți transmite acest lucru constructorului în felul următor:

new StreamWriter(File.OpenWrite(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))

Aflați mai multe despre File.OpenWrite și FIleMode. File.OpenWrite poate face treaba de la sine dacă doriți să utilizați asta. Dar cred că, deoarece File.OpenWrite returnează FIleStream, acesta poate fi transmis constructorului StreamWriter.

person Brian Mains    schedule 28.06.2015