2013-05-16 1 views
3

이 오류의 원인을 정확히 찾아 내지 못했습니다. 모든 메신저는 현재 날짜에 생성 된 파일 (pdfs)을 일정한 시간이 지나면 디렉토리에서 다른 디렉토리로 복사합니다. 여기 내 코드는 다음과 같습니다VB - "다른 프로세스에서 사용 중입니다"오류로 인해 파일을 복사 할 수 없습니다.

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick 

    Dim file As String 
    Dim now As String = DateTime.Today.ToShortDateString 
    Dim dir As String = "C:\PDFs\" 
    Dim bupdir As String = "C:\PDFs\copied\" 
    Dim Files() As String = Directory.GetFiles(dir) 

    For Each file In Files 
     Dim dt As String = IO.File.GetLastWriteTime(file).ToShortDateString 
     If dt = now Then 
      IO.File.Copy(Path.Combine(dir, file), Path.Combine(bupdir, file), True) 
     End If 
    Next 

End Sub 
+0

이 타이머를 감안할 때 "틱"이 겹쳐져 있습니까? 틱에있는 공유 객체에서 'Monitor.TryEnter'를 실행하여 자신을 밟지 못하게 할 수 있습니다. – vcsjones

+0

@vcsjones Windows 타이머라고 생각합니다. Reentrancy가 문제가되지 않아야 함 – Steve

+0

사용하지 않는 언어로 질문에 태그를 추가하지 마십시오 ... –

답변

4

귀하의 문제는 Directory.GetFiles()가 소스 디렉토리에있는 파일의 전체 경로 이름을 반환하는 사실에있다.

대상 파일 이름을 만들려고 할 때 Path.Combinefile 변수가 절대 경로이고 bupdir 경로를 추가하지 않는다고 봅니다.
이 변수 file의 값을 다시 부여하며, 사용자는 문제를

IO.File.Copy(file, Path.Combine(bupdir, Path.GetFileName(file)), True) 

FROM MSDN

를 해결하려면이

IO.File.Copy("C:\PDFs\file.pdf", "C:\PDFs\file.pdf", True) 

같은 끝낼 지정된 경로 중 하나가 길이가 0 인 문자열 인 경우이 메서드 은 다른 경로를 반환합니다. path2에 절대 경로가 포함되어 있으면 메서드는 path2를 반환합니다.

관련 문제