2011-06-13 10 views
0

최근에 다운로드 한 설치 파일 및 기타 미디어 파일과 같은 임시 파일을 삭제되기 전에 안전한 위치로 복사 할 수 있도록 유용한 코드를 작성했습니다.임시 파일을 삭제하기 전에 복사하십시오.

string dir = "c:\\Users\\neal\\appdata\\Local\\Temp"; 

string newdir = "D:\\"; 

var directory = new DirectoryInfo(dir); 

var myFile = (from f in directory.GetFiles() 
       orderby f.LastAccessTime descending 
       select f).First(); 

var myDir = (from f in directory.GetDirectories() 
      orderby f.LastAccessTime descending 
      select f).First(); 

myFile.CopyTo(newdir, true); 

위의 방법은 실제로 작동하지 않습니다. 왜 그런지 모르겠습니다. 모든 파일에 액세스 권한 (설치 파일)이 없을 수도 있습니다.

거기에 어떤 생각이나 다른 논리가 있습니까?

+1

몇 가지 사항 : 첫째, 현재 myDir을 전혀 사용하지 않고 있습니다. 둘째로 .First()를 사용하고 있습니다. 이것은 디렉토리에있는 * 처음 * 파일 만 가져올 것입니다. 아마도이 파일이 복사 된 파일 중 하나 일 것입니다. 이 문제에 대한 재귀 적 접근이 더 필요합니다. –

+4

.bat 스크립트에서 xcopy를 호출하는 방법은 어떻습니까? 이것을 복잡하게 할 필요가 없습니다. –

+0

코드에서 특정 작업을 수행 할 필요가 없다면 Chris와 동의 할 것입니다. 당신은 robocopy를 볼 수 있습니다 - 나는 속임수를 멋지게 찾았습니다. –

답변

3

나는 확실히 당신이은 FileSystemWatcher http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

이 그렇게보고있는 디렉토리로 변경 프로그램을 통지합니다 체크 아웃해야 코드에서 뭔가를 구현하고자하지만 경우,이에 이미 검증 된 솔루션이 있다는 것을 동의합니다 당신은 행동을 취할 수 있습니다.

+0

이것은 내가 찾고있는 해결책의 절반입니다. 이것은 임시 폴더에 최근에 다운로드 된 정확한 파일을 찾은 후입니다. – nebula

+0

미리 파일을 알아야 할 필요는 없습니다. ""필터를 사용하여 temp 디렉토리를 모니터하고 관심있는 이벤트를 처리하는 경우 생성, 수정 또는 삭제 된 모든 파일은 발생한 이벤트의 전체 경로를 제공합니다. 따라서 자동으로 새로운 파일을 얻고 아주 적은 코드로 파일을 처리 할 수 ​​있습니다. – Bueller

+0

답변이 실제로 효과가있었습니다. 고맙습니다 ! – nebula

관련 문제