2011-08-17 5 views
3

File.Move 명령을 사용할 때 이상한 문제가 발생했습니다. Programm 실제로 파일을 이동하고 이름을 바꾼다 그러나 나에게 예외를 throw합니다 sourcefile 찾을 수 없습니다; - 파일이 이동 되었기 때문에 예상되는 것.File.Move 명령에 이상한 문제가 발생했습니다.

내가 예외를 잡으면 프로그램이 제대로 작동하지만 왜 이런 예외가 발생하는지 궁금합니다.

내 코드 :

if (!Directory.Exists(dir)) 
{ 
    Directory.CreateDirectory(dir); 
    //suspend thread for 0.5 sec 
} 

이것은 아마 당신이 즉시 디렉토리를 만들고 있다는 사실과 관련이 : 두 번째 (또는 이하) 여기 반 동안 스레드를 일시 중단

foreach (string str in CPM.prot.FKFinishedBad) 
    { 
     try 
     { 
      string dir = System.Configuration.ConfigurationSettings.AppSettings["ResultDir"] + "\\" + DateTime.Now.ToString("yyyy_MM_dd") + "_Bearbeitete Protokolle"; 
     if (!Directory.Exists(dir)) 
     { 
      Directory.CreateDirectory(dir); 
     } 
      File.Move(System.Configuration.ConfigurationSettings.AppSettings["ResultDir"] + "\\" + str + "_" + CPM.LastJob + ".txt", dir + "\\" + "\\" + str + "_" + CPM.LastJob + "_Nachproduziert" + ".txt"); 
     } 
     catch (Exception e) 
     { 
     } 
    } 
+1

'FKFinishedBad'에 중복 항목이 있습니까? –

+0

또한 이동중인 파일을보기 위해 탐색기를 열지 않았는지 확인하십시오. 나는 한동안 하루 종일 지체 된 예외를 쫓아 보냈다. –

답변

1

모든 파일이 있는지 확인하십시오. 그 중 하나가 누락 된 경우 (예외에 대해 설명 함), 나머지는 올바르게 처리 될 수 있습니다. File.Exists로 이동하기 전에 체크 할 수도 있습니다.

또한 빈 catch 블록을 사용할 때 디버깅 할 때 많은 두통을 유발할 수 있으므로주의해야합니다.

+0

이 동의하는 가장 좋은 방법은 File.Move를 수행하기 전에 항상 File.Exists를 사용하는 것입니다. 그러면 예외가 발생하지 않을 것입니다. –

+0

나는 이것을 정말로 이해하지 못한다. 그러나 그것은 해결책이다. 하지만 모든 파일이 이미 존재하기 때문에 아무도 나에게 설명 할 수 없다면 나는 매우 감사 할 것이다. BTW 나는 파일이 광석이 옮겨지고 똑같은 이름으로 삭제가 잘 작동하면 사용자가 선택하게했기 때문에 파일이 이전에 존재했는지 확신합니다. – mono

1

시도 파일을 이동하십시오. 그래서 시스템에 "호흡"하게 스레드를 일시 중단하십시오.

+0

시도했는데 이것은 이유가 아니지만 빨리 주셔서 감사합니다. 답변 – mono

2

CPM.prot.FKFinishedBad의 각 항목이 고유해야합니다 (현상의 원인 일 수 있음).

또한 코드를 리팩터링하는 것이 좋습니다. 디렉토리 라인을 반복 할 필요가 없으며 루프 외부에 있어야합니다.

그리고 String.Format 및 Path.Combine을 사용하는 방법을 배우십시오.

+0

모든 파일이 고유하고 존재하지는 않습니다. 내가 설명하려고 했으므로, 파일의 이동은 잘 작동하지만 그 이후에 나는 더 이상 존재하지 않는 소스 파일 때문에 예외가 생겼다. 옮겨 졌기 때문에 명백한 것은 무엇인가. 적어도 이것은 문제에 대한 나의 이해이다. – mono

0

방금이 문제가 발생했습니다. 동일한 작업을 수행하는 것으로 보이는 FileInfo.MoveTo 명령이 있다는 것을 깨닫는 데 시간이 걸렸습니다.

그러나 예외는 발생하지 않으며 작동합니다.

한 가지 일을하는 두 가지 방법이 있고 그 중 하나만 작동하는 경우 조금 어둡습니다.

관련 문제