2009-08-27 17 views
0

StreamReader.WriteLine()을 사용하여 데이터를 가져온 후 txt 파일에서 한 줄을 제거하려고합니다. 하지만 웹에 대한 유용한 참조를 얻을 수 없습니다. 누군가는 Repalce() 메서드로 처리 할 수 ​​있다고 말합니다.하지만 나는 그 효율성을 생각하지 않습니다. 누구나 해결 방법을 알려 줄 수 있습니다. 감사!C# : Txt 파일의 한 줄 제거

+0

불충분 한 방법으로 간주하는 이유는 무엇입니까? –

답변

4

파일의 중간 부분을 제거 할 수 없습니다. 그 시점부터 모든 것을 다시 작성하거나 전체 파일을 다시 작성해야합니다. 그리고 StreamReader/StreamWriter를 사용하는 경우에는 파일 위치에 대한 액세스 권한이 없으므로 유일한 선택은 전체 파일을 다시 작성하는 것입니다.

다음은이를 수행하는 방법의 예입니다.

public static void RemoveLines(Predicate<string> removeFunction,string file){ 
     string line, tempFile = null; 
     try{ 
      tempFile = Path.GetTempFileName(); 
      using (StreamReader sr = new StreamReader(file)) 
      using (StreamWriter sw = new StreamWriter(tempFile,false,sr.CurrentEncoding)) 
       while ((line = sr.ReadLine()) != null) 
        if (!removeFunction(line)) sw.WriteLine(line); 
      File.Delete(file); 
      File.Move(tempFile, file); 
     }finally{ 
      if(tempFile != null && File.Exists(tempFile)) 
       File.Delete(tempFile); 
     } 
    } 

은 10 자 길이의 모든 라인을 제거이

RemoveLines(line=>line.Length==10,"test.txt") 

처럼 사용하고, 관련된 위험을 최소화하기 위해 임시 파일을 사용합니다. 물론, 당신이 뭔가를 더 짧게하고 싶다면 당신은 이와 비슷한 것을 할 수 있습니다.

File.WriteAllLines(fileName,File.ReadAllLines(fileName).Where(line => line.Length != 10)) 

더 많은 작업 메모리를 필요로하고, 당신은 아마 손상된 파일을 일으키는 컴퓨터 충돌에 대비하기 위해 임시 파일/이동 트릭을해야한다. 그러나 이해하기 쉽고 간결한 코드입니다.