2013-12-20 3 views
1

콘솔 응용 프로그램을 사용하여 텍스트 파일을 덮어 쓰거나 변경하려고합니다. 여기서는 파일을 한 줄씩 읽습니다. 아무도 나를 도울 수 있습니까? 여기동일한 텍스트 파일에서 텍스트를 덮어 쓰는 방법

StreamReader sr = new StreamReader(@"C:\abc.txt"); 
string line; 
line = sr.ReadLine(); 

while (line != null) 
{ 
    if (line.StartsWith("<")) 
    { 
    if (line.IndexOf('{') == 29) 
    { 
     string s = line; 
     int start = s.IndexOf("{"); 
     int end = s.IndexOf("}"); 
     string result = s.Substring(start+1, end - start - 1); 
     Guid g= Guid.NewGuid(); 
     line = line.Replace(result, g.ToString()); 
     File.WriteAllLines(@"C:\abc.txt", line); 
    } 
    } 
    Console.WriteLine(line); 

    line = sr.ReadLine(); 
} 
//close the file 
sr.Close(); 
Console.ReadLine(); 

나는 오류 파일을 얻고 이미 다른 프로세스에 의해 열려 있습니다.

제발 도와주세요. 주요 작업은 수정을 통해 동일한 텍스쳐 파일을 덮어 쓰는 것입니다.

+0

streamreader를 사용하여 모든 라인을 읽고 라인 컬렉션에 저장 한 다음 fi에 쓰기를 시작하기 전에 스트림 리더를 닫아야합니다 다시 르. –

답변

0

단일 스트림이 필요합니다. 읽기 및 쓰기 모두에 대해 열어야합니다.

FileStream fileStream = new FileStream(
     @"c:\words.txt", FileMode.OpenOrCreate, 
     FileAccess.ReadWrite, FileShare.None); 

이제 문제는 당신이 사용하는 파일에 쓰기 위해 노력하고 있다는 점이다

How to both read and write a file in C#

0

확장 토론이 링크를 참조하시기 바랍니다 fileStream.Read() and fileStream.Write() 방법

을 사용할 수 있습니다 StreamReader. 닫을 때 또는 오류가있는 경우에도 메시지를 닫고 닫는 using -statement를 사용해야합니다.

using(StreamReader sr = new StreamReader(@"C:\abc.txt")) 
{ 
    // ... 
} 
File.WriteAllLines(...); 

File.WriteAllLines 또한 파일뿐만 아니라 currrent 라인에 모든 행을 기록, 그래서 루프에 그것을 할 무의미.

텍스트 파일의 줄을 읽는 다른 방법을 제안 할 수 있습니까? File.ReadAllLines을 사용하면 모든 행을 string[] 또는 File.ReadLines으로 읽을 수 있습니다. 모든 행을 느리게 읽음으로써 StreamReader과 유사하게 작동합니다.

여기 버전 같은 일을하지만 (? 더 읽기) LINQ 쿼리를 사용하여입니다 :

var lines = File.ReadLines(@"C:\abc.txt") 
    .Where(l => l.StartsWith("<") && l.IndexOf('{') == 29) 
    .Select(l => 
    { 
     int start = l.IndexOf("{"); 
     int end = l.IndexOf("}", start); 
     string result = l.Substring(start + 1, end - start - 1); 
     Guid g = Guid.NewGuid(); 
     return l.Replace(result, g.ToString()); 
    }).ToList(); 
File.WriteAllLines(@"C:\abc.txt", lines); 
+0

감사합니다. Tim, 그 일. – user2477724

0

문제는 파일을 열고 그에서 작성하는 동시에 같은 파일 읽기 점이다 파일. 그러나 당신이해야하는 것은

  1. 그래서 코드가

    List<string> myAppendedList = new List<string>(); 
    using (StreamReader sr = new StreamReader(@"C:\abc.txt")) 
    
    { 
        string line; 
        line = sr.ReadLine(); 
    
        while (line != null) 
        { 
         if (line.StartsWith("<")) 
         { 
          if (line.IndexOf('{') == 29) 
          { 
           string s = line; 
           int start = s.IndexOf("{"); 
           int end = s.IndexOf("}"); 
           string result = s.Substring(start + 1, end - start - 1); 
           Guid g = Guid.NewGuid(); 
           line = line.Replace(result, g.ToString()); 
           myAppendedList.Add(line); 
    
          } 
         } 
         Console.WriteLine(line); 
    
         line = sr.ReadLine(); 
        } 
    } 
    
    if(myAppendedList.Count > 0) 
        File.WriteAllLines(@"C:\abc.txt", myAppendedList); 
    
    처럼해야

을 제기

  • 다시 내용을 쓰기 닫습니다 파일을 파일
  • 의 변경을 읽고있다
  • 관련 문제