2017-11-05 14 views
0

.txt 파일에 쓰는 간단한 콘솔 응용 프로그램에서 작업하고 있습니다.append가 false로 설정된 경우 파일에 추가하는 StreamWriter

StreamWriter j1 = new StreamWriter(@"jmeno1.txt", false); 
StreamWriter j2 = new StreamWriter(@"jmeno2.txt", false); 
StreamWriter s1 = new StreamWriter(@"skore1.txt", false); 
StreamWriter s2 = new StreamWriter(@"skore2.txt", false); 
StreamWriter l1 = new StreamWriter(@"legy1.txt", false); 
StreamWriter l2 = new StreamWriter(@"legy2.txt", false); 

먼저 내가 기본값을 적어 : 나는 APPEND와 몇 Streamwriters false로 설정되어

string jmeno1; 
string jmeno2; 
int legy1 = 0; 
int legy2 = 0; 
int skore1 = 501; 
int skore2 = 501; 
Console.WriteLine("První jméno?"); 
jmeno1 = Console.ReadLine(); 
Console.WriteLine("Druhé jméno?"); 
jmeno2 = Console.ReadLine(); 

j1.WriteLine(jmeno1); 
j2.WriteLine(jmeno2); 
s1.WriteLine(skore1.ToString()); 
s2.WriteLine(skore2.ToString()); 
l1.WriteLine(legy1.ToString()); 
l2.WriteLine(legy2.ToString()); 
j1.Flush(); 
j2.Flush(); 
s1.Flush(); 
s2.Flush(); 
l1.Flush(); 
l2.Flush(); 

그리고 일부 사용자 입력 후 나는이를 이용한 (새 문자열이 파일을 덮어 쓰려면 방법은 기본 것과 같이). 그러나 파일을 덮어 쓰지 않고 텍스트를 추가 할뿐입니다. append가 false로 설정 되었기 때문에이 점은 정말 이상합니다. 나는 전에 이것을 경험하지 못했습니다.

Console.WriteLine("\n" + jmeno1 + " hodil/a?"); 
skore1 = skore1 - int.Parse(Console.ReadLine()); 

if (skore1 == 0) 
{ 
    legy1++; 

    // writing to file 
    l1.WriteLine(legy1.ToString()); 
    l1.Flush(); 

    Console.WriteLine("\n" + jmeno1 + " zavřel/a!"); 
    skore1 = 501;          
    skore2 = 501; 

    // writing to file 
    s1.WriteLine(skore1.ToString()); 
    s2.WriteLine(skore2.ToString()); 

    s1.Flush(); 
    s2.Flush(); 
    zacina = 2; 
} 

else 
{ 
    // writing to file 
    s1.WriteLine(skore1.ToString()); 
    s1.Flush(); 

    Console.WriteLine("\n" + jmeno2 + " hodil/a?"); 
    skore2 = skore2 - int.Parse(Console.ReadLine()); 

    if (skore2 == 0) 
    { 
     legy2++; 

     // writing to file 
     l2.WriteLine(legy2.ToString()); 
     l2.Flush(); 

     Console.WriteLine("\n" + jmeno2 + " zavřel/a!"); 
     skore1 = 501; 
     skore2 = 501; 

     // writing to file 
     s1.WriteLine(skore1.ToString()); 
     s2.WriteLine(skore2.ToString()); 
     s1.Flush(); 
     s2.Flush(); 

     zacina = 2; 
    } 

    else 
    { 
     // writing to file 
     s2.WriteLine(skore2.ToString()); 
     s2.Flush(); 
    } 
} 

점수에 파일이 다음 this과 같습니다

여기 (외국어 죄송합니다) 파일을 작성하는 일이 코드의 일부입니다.

도움 주셔서 감사합니다.

+1

그냥 * one * 파일과 함께 이상적으로 [mcve]를 제공해주십시오. 나는 당신이 잘못 진단하거나 오해하고 있다고 강력하게 의심합니다. 정말로 * 그 코드를 추가하지 않을 것입니다. –

+0

추가하는 StreamWriter를 닫기 전에 의미합니까? 그렇지 않으면 한 줄 이상의 파일을 다른 파일에 쓰는 것이 불가능할 것이므로 기쁘다. 기본값을 쓰고 덮어 쓰려고 할 때 다시 닫으려고 했습니까? – oerkelens

+0

예, 그게 전부입니다! 나는 그들을 닫는 것을 잊었다. 고마워요! –

답변

0

귀하의 코드 (작성 시점에서 불완전 함)는 appending 모드가 StreamWriter (SR이라고 부름)이라는 것을 의미하는 잘못된 가정을 보여줍니다. 파일이 열리고 SR이 첫 번째 줄을 쓰고 SR.Flush 다음에 파일에 텍스트를 쓰고, 글자의 바이트 길이를 바이트 수로 늘리고 디스크에 텍스트가있는 버퍼를 플러시합니다. SR.WriteLine 다음 호출은 덮어 쓰지 않고 마지막으로 FileStrea.Position에서 시작하는 바로 그 파일에 다음 행을 쓸 것입니다.

StreamWriter의 파일에 옵션을 추가하면 다음에 동일한 파일을 StreamWriter과 함께 열면 기존 콘텐츠에 텍스트가 추가됩니다. 반대로 append not 옵션을 사용하면 이전에 해당 파일에 있던 모든 기존 내용을 덮어 쓸 새로운 빈 파일을 만듭니다. bool append 생성자 매개 변수에 대한 MSDN 설명서를 말한다 다음

APPEND Type: System.Boolean 파일에 데이터를 추가하는 경우는 true 파일을 덮어 쓰려면 false입니다. 지정된 파일이 없으면이 매개 변수는 영향을주지 않으며 생성자는 새 파일을 만듭니다.