StreamWriter 在程序启动时清除文件

问题描述

首先是一个带有你名字的程序,然后你有一个任务来查询一个从 1 到 100 的数字,然后在猜出数字之后,程序必须打印你尝试的数字并记录并检查你是否打破了记录,如果你打破了程序必须将其保存到 txt 文件中。

如果我得到正确的数字,我的 txt 文件就清晰了。

PS:评论是波兰语。

using System;
using System.Windows;
using System.IO;

// https://www.szyfry.matw.pl/

// nie diala mi rekord pointsow linia 190

// Przestrzeń nazw
namespace NumberGuesser 
{

    // Klasa główna
    class Program
    {

        // Metoda główna,czyli punkt wejścia programu 
        static void Main(string[] args)
        {

            // Wyświetl informacje o aplikacji
            GetAppInfo();

            // Zapytaj o imię i zainicjalizuj zmienną typu tesktowego
            string userName = GetUserName();

            // Przywitaj użytkownika
            GreetUser(userName);

            // Wylosuj liczbę z przedziału od 1 do 10
            Random random = new Random();
            // Zainicjalizuj zmienną typu całkowtego

            int numbersCountRekord = 0;

            //zeby ciagle pytano cie o liczby
            while (true){
            // Wyświetl komunikat
            int correctNumber =  random.Next(1,101);

            // Zainicjalizuj zmienną typu logicznego
            bool correctAnswer = false;

            int numbersCount = 0;

            Console.WriteLine("\nZgadnij wylosowaną liczbę z przedziału od 1 do 100.");

            // Powtarzaj operacje w pętli dopóki wartość zmiennej correctAnswer jest równa false
            while (!correctAnswer)
            {
                // Pobierz i zainicjalizuj zmienną typu tesktowego
                string input = Console.ReadLine();

                // Zadeklaruj zmienną typu liczbowego
                int guess;

                // Konwertuj typ tesktowy na typ liczbowy
                bool isNumber = int.TryParse(input,out guess);
                
                // Sprawdź czy użytkownik wprowadził liczbę
                if (!isNumber)
                {
                    // Wyświetl komunikat 
                    PrintColorMessage(ConsoleColor.Yellow,"Proszę wprowadzić liczbę.");
                    // Przejdź do kolejnej iteracji pętli
                    continue;
                }

                // Sprawdź czy użytkownik wprowadził liczbę z przediału od 1 do 10
                if (guess < 1 || guess > 100)
                {
                    // Wyświetl komunikat
                    PrintColorMessage(ConsoleColor.Yellow,"Proszę wprowadzić liczbę z przedziału od 1 do 100.");
                    // Przejdź do kolejnej iteracji pętli
                    continue;
                }

                // Sprawdź czy użytkownik wprowadził liczbę mniejszą od wylosowanej liczby
                if (guess < correctNumber)
                {
                    // Wyświetl komunikat
                    PrintColorMessage(ConsoleColor.Red,"Błędna odpowiedź. Wylosowana liczba jest większa.");
                    numbersCount += 1;
                }
                // Sprawdź czy użytkownik wprowadził liczbę większą od wylosowanej liczby
                else if (guess > correctNumber)
                {
                    // Wyświetl komunikat
                    PrintColorMessage(ConsoleColor.Red,"Błędna odpowiedź. Wylosowana liczba jest mniejsza.");
                    numbersCount += 1;
                }
                else
                {
                     // Przypisz do zmiennej correctAnswer wartość true
                    correctAnswer = true;
                    // Wyświetl komunikat
                    PrintColorMessage(ConsoleColor.Green,"Brawo! Prawidłowa odpowiedź!");
                    numbersCount += 1;                

                    //czy rekord jest aktualny 
                    int intLine; 
                    using(System.IO.StreamReader sr = new System.IO.StreamReader("olnitr.txt")){
                      string line = sr.ReadLine();
                      Int32.TryParse(line,out intLine);
                    }
                    if(intLine == null){
                      numbersCountRekord = 0;
                      continue;
                    }

                    if(numbersCountRekord == 0 || intLine == 0){
                      numbersCountRekord = numbersCount;
                      using(System.IO.StreamWriter sw = new System.IO.StreamWriter("olnitr.txt",false)){
                        sw.Write(numbersCountRekord);
                      }
                    }

                    // robi rekor

                    else if(numbersCount < intLine){
                      numbersCountRekord = numbersCount;
                      using(System.IO.StreamWriter sw = new System.IO.StreamWriter("olnitr.txt",false)){                      
                        sw.Write(numbersCountRekord);
                      }
                    }

                    //pokazuje liczbe prob
                    PrintColorMessage(ConsoleColor.magenta,$"Liczba prób: {numbersCount}");

                    //pokazuje twój rekord
                    PrintColorMessage(ConsoleColor.magenta,$"Rekord: {numbersCountRekord}");
                  
                    using(System.IO.StreamWriter sw = new System.IO.StreamWriter("olnitr.txt",false)){sw.Flush();}

                    using(System.IO.StreamReader sr = new System.IO.StreamReader("olnitr.txt")){sr.Close();}
                }
              }
            }

        }

        // Wyświetl informacje o aplikacji
        static void GetAppInfo()
        {
            // Zainicjalizuj informacje o aplikacji
            string appName = "Zgadywanie liczby";
            string appVersion = "0.0.1";
            string appAuthor = "Patryk Sładek";
            string appModsCreator = "Paweł Wojas";
            string modVersion = "0.1";

            // Przygotuj tekst informacji
            string info = $"[{appName}] Wersja: {appVersion},Autor: {appAuthor} | Modyfikacja Sterling Wersja: {modVersion},Autor: {appModsCreator}";

            // Wyświetl komunikat w fioletowym kolorze
            PrintColorMessage(ConsoleColor.magenta,info);

        }

        // Zapytaj o imię i zwróć wartość typu tesktowego
        static string GetUserName()
        {
            // Zapytaj o imię
            Console.WriteLine("Jak masz na imię?");

            // Pobierz odpowiedź użytkownika
            string inputUserName = Console.ReadLine();

            // Zwróć odpowiedź
            return inputUserName;
        }

        // Przywitaj użytkownika
        static void GreetUser(string userName) // Parametrem wejściowym metody jest imię użytkownika 
        {
            // Przygotuj tekst przywitania
            string greet = $"Powodzenia {userName},odgadnij liczbę...";

            // Wyświetl komunikat w niebieskim kolorze
            PrintColorMessage(ConsoleColor.Blue,greet);

            // Wyświetl pustą linię na konsoli
            Console.WriteLine();
        }


        // Wyświetl komunikat w odpowiednim kolorze
        static void PrintColorMessage(ConsoleColor color,string message)
        {
            // Zmień kolor tekstu konsoli
            Console.ForegroundColor = color;

            // Wyświetl komunikat na konsoli
            Console.WriteLine(message);

            // Zresetuj kolor tekstu konsoli
            Console.ResetColor();
        }

        
    }
}

解决方法

这是给定您正在使用的构造函数和参数的默认行为:

helm repo add nginx-stable https://helm.nginx.com/stable

According to MSDN,为 System.IO.StreamWriter sw = new System.IO.StreamWriter("olnitr.txt",false) 参数提供 false 会导致新的 StreamWriter 覆盖现有文件:

追加
布尔值
true 将数据附加到文件;假覆盖 文件。如果指定的文件不存在,则该参数没有 效果,构造函数创建一个新文件。

如果您想向现有文件附加行而不是覆盖它,请提供 append 作为参数,或使用 true 类的 Append 方法之一。

,

没关系我有这个,我的 StreamWriter 是真的,但在我向文件添加一些文本之前,我清除了文件。

类似的东西:

using(FileStream fs = File.Open(path,FileMode.OpenOrCreate,FileAccess.ReadWrite))
{
     lock(fs)
     {
         fs.SetLength(0);
     }
}

using(System.IO.StreamWriter sw = new System.IO.StreamWriter("olnitr.txt",true)){
    sw.Write(numbersCountRekord);
}