2010-02-26 6 views
2

코드를 해결할 수있는 방법을 ... C#에서 file.move를 사용하여 :파일 잠금 I 중지하거나이

 String tempFile = Path.GetTempFileName(), read = ""; 
     TextReader pending = new StreamReader("c:\\pending.txt"); 
     TextWriter temp = new StreamWriter(tempFile); 

     read = pending.ReadLine(); 

     while ((read = pending.ReadLine()) != null) 
     { 
      temp.WriteLine(read); 
     } 

     pending.Close(); 
     temp.Close(); 

     File.Delete("c:\\pending.txt"); 
     File.Move(tempFile, "c:\\pending.txt"); 

존재하지 않는 경우 프로그램이 시작될 때 pending.txt 파일이 생성됩니다. 이 코드는 파일의 첫 번째 행을 삭제합니다. 코드를 디버깅 할 때

 File.Move(tempFile, "c:\\pending.txt"); 

이 파일을 잠그므로 더 이상 쓸 수 없습니다.

+1

정확히 무엇을 의미합니까? – SLaks

+0

권한 부여 문제 인 것 같습니다. – SLaks

+0

신경 쓰지 마라. Windows 탐색기 스틸은 잠긴 아이콘을 표시하지만 나머지 코드는 잘못되었습니다. 죄송합니다. 그러나 사용 팁에 감사드립니다. readBlock에 대해 좀 더 살펴야합니다. – Mtlca401

답변

3

이 같은 using 문에 StreamReaderStreamWriter을 닫아야합니다 :

String tempFile = Path.GetTempFileName(), read = ""; 
using(TextReader pending = new StreamReader("c:\\pending.txt")) 
using(TextWriter temp = new StreamWriter(tempFile)) 
{ 

    read = pending.ReadLine(); 

    while ((read = pending.ReadLine()) != null) 
    { 
     temp.WriteLine(read); 
    } 
} 

File.Delete(@"c:\pending.txt"); 
File.Move(tempFile, @"c:\pending.txt"); 
+0

또한 파일을 직접 복사하는 경우 고정 크기 블록 (4K, 8K?)을 사용하면 줄 단위보다 효율적입니다. – Andrew

+0

시도했지만 여전히 동일한 결과를 제공합니다. 무슨 일이 일어나고, 프로그램이 "File.Move"를 친다면 파일의 아이콘에 잠금 이미지가 생깁니다. 이 후에는 파일에 아무 것도 쓸 수 없습니다. 그것은 쓴 것처럼 보이지만 Windows 탐색기를 통해 파일을 열면 파일이 변경되지 않습니다. 나는 사용중인 파일을 말하는 어떤 오류도 얻지 않는다. – Mtlca401