2012-05-16 6 views
0

현재 프로젝트에서 텍스트 파일의 특정 텍스트 줄을 제거해야합니다.from.txt 파일에서 텍스트 줄 삭제하기

static void Main(string[] args) 
    { 
     string line = null; 
     string line_to_delete = "--"; 
     string desktopLocation = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
     string text = Path.Combine(desktopLocation, "tim3.txt"); 
     string file = Path.Combine(desktopLocation, "tim4.txt"); 

     using (StreamReader reader = new StreamReader(text)) 
     { 
      using (StreamWriter writer = new StreamWriter(file)) 
      { 
       while((line = reader.ReadLine()) != null) 
       { 
        if (string.Compare(line, line_to_delete) == 0) 
         continue; 
        writer.WriteLine(line); 
       } 
      } 

이 새로운 txt 파일에 텍스트 만 기록하지만 아무것도 삭제 나던 :

내가 이미 가지고있는 코드입니다.

감사합니다. 주요 문제는 txt 파일에서 특정 텍스트 줄만 삭제하면된다는 것입니다.

+0

당신이 디버거를 실행 한 :

 if (string.Compare(line, line_to_delete) == 0) continue; 

에 :이 경우 당신은에서 경우 조건을 변경해야? 이것은 간단하게 해결할 수 있어야합니다. – CharlesB

+0

글쎄, 나는 모든 오류가 발생하지 만, 나는 그것을 실행할 때 모든 텍스트 파일을 첫 번째 txt 파일을 두 번째 복사본으로 복사합니다. 그것은 내가 지정한 텍스트 또는 문자를 삭제하지 않습니다. –

+0

줄 끝을 고려하십시오. 입력 데이터를 표시하십시오. 디버그를 사용하면 문자열의 다른 점을 알 수 있고 왜 비교 자도 같지 않은 문자열을 찾을 수 있습니까? – gabba

답변

0

나는/String.comapre가 위와 같이 당신이 시도 할 수 있습니다 작동하지 않는

if(String.IsNullOrEmpty(line) || String.Equals(line.Trim(), line_to_delete)) 

을 시도 예기치 않은 결과를

대신

if (string.Compare(line, line_to_delete) == 0) 

를 반환하는 원인이되는 교육 공간, 최고의 의심하는 다음 (LINQ)

편집 - 작동하지 않습니다

위의 경우 위의 작품, 그것은 당신의 코드에있는 모든 사용하여 블록을 대체 할 경우에만 텍스트를

File.WriteAllText(file, File.ReadAllText(text).Replace(line_to_delete,"")) 

를 대체하기 위해, 나는 그것이 데이터 문제 (텍스트 "__"존재하지 않는 의심 파일)

+0

String.IsNullOrEmpty (line) || 빈 줄을 건너 뛸 것입니다, 내가 옳다는 것을 고집했습니다. – gabba

+0

방금이 코드를 시도했지만 동일한 결과를 제공합니다. 같은 텍스트를 다시 작성합니다. –

+1

무슨 일이 일어나는지 이해하기 어렵습니다. 나는 line.Contains (line_to_delete) 조건에 따라 if 줄에 중단 점을 넣으려고합니다. 고마워, 두 문자열을 quickwatch –

0

내가 아는 한, 동시에 파일을 읽고 쓸 수 없습니다 (파일 잠금). 할 수있는 일은 적절한 데이터를 tim4.txt에 쓰는 것입니다 (예제에서와 같이). 그리고 끝나면 tim3.txt를 삭제하고 tim4.txt의 이름을 tim3.txt로 바꿉니다.

편집 : Mis가 질문을 해석했습니다. 같은 파일에 변경 사항을 쓸 수 없다고 생각했지만 텍스트는 필터링되지 않았습니다. Tilan의 제안을 시도해야합니다

+0

잘 나는 많은 사람들이 그 방법을 제안 볼 수 있습니다. 나는 이것을 어떻게 할 것인지 잘 모른다. –

+0

실제로는 꽤 쉽습니다. using 문 (모든 IO 읽기/쓰기가 완료되면)을 입력 한 후 간단한 try/catch 블록을 삽입하고 File.Delete (file_to_delete)를 호출하십시오. 그런 다음 새 파일 (tim4)의 이름을 이전 (tim3)의 이름으로 바꿔야합니다. C#은 이름 바꾸기 기능을 제공하지 않으므로 File.Move (old_file, new_file)를 호출 할 수 있습니다. 이 일이 명확한가요? –

+0

코드를 정확하게 게시 한 사람을 찾았습니다. http://stackoverflow.com/a/668917/1222748 –

0

귀하의 의견에 나는 -로 시작하는 줄을 삭제하려고한다는 사실을 알고 있습니다.

  if (line.Trim().IndexOf(line_to_delete) == 0) 
       continue; 
관련 문제