2012-11-05 2 views
1

온라인 데이터에서 닫기 전에 파일을 삭제하고 새 파일을 만드는 WPF/C# 앱을 만듭니다. 문제는 새로운 파일 생성 프로세스가 완료되거나 시작되기 전에 앱이 무작위로 중단 될 때 발생합니다.앱이 충돌 할 때 파일 복구 C#

내 코드에서 사용할 수있는 파일 복구 방법이 있습니까 (앱에서 삭제를 취소하는 것이 아니라). 앱이 손상되면 삭제 된 파일을 잃어 버릴 수 없습니까?

정확하게 말하면 앱의 시작 부분에있는 4 개의 파일을 삭제하고 앱의 마지막에 새로운 파일을 만듭니다. 그러나 앱이 중간에 충돌하면 파일이 손실됩니다.

이 문제를 어떻게 방지 할 수 있습니까?

나는 무작위 충돌의 가능성을 줄이려고했지만 한동안은 여전히 ​​발생합니다.

+0

해결 방법은 새 파일이 완료 될 때만 파일을 삭제하는 것입니다. –

+0

새 파일을 만들기 전에 이름을 변경하거나 제거해야하기 때문에 먼저 같은 이름으로 다운로드 한 새 파일을 삭제해야합니다 (이름이 같아야 클래스 프로젝트 임). –

답변

3

, 당신이 할 수있는 파일 (들)의 손실에 대해 당신이 Warry의 경우 :

  • 시작에 A.txt (말)의 삭제하기 전에 그것이 후 삭제 사본 A.tmp의 만듭니다.
  • 닫을 때 새 파일을 만들고 tmp 개의 파일을 디렉토리에 모두 삭제하십시오. 뭔가 프로그램 실행 동안 잘못된 경우이 방법으로

, 프로그램이 다시 시작되면, 그것은 마지막으로 생성 tmp을 발견 할 것이다, 그래서 그들로부터 (경우 필요) 정보를 재구성 및 프로그램 사이클을 계속할 수 있습니다.

0

새 파일이 만들어 질 때까지 이전 파일을 삭제하지 마십시오? 대신 이름을 바꿉니다. 앱을 시작하면 이전 (이름이 바뀐) 파일이 계속 남아있을 수 있기 때문에 충돌이 발생했는지 알 수 있습니다. 그런 다음 정리 작업을 수행 할 수 있습니다.

1

파일을 삭제하지 말고 일부 임시 폴더로 이동하는 것을 고려하십시오. 일부 삭제 취소 기술을 발명 할 수 있지만 파일 시스템이 비어있는 공간을 언제든지 다시 쓸 수 있으므로 신뢰할 수 없습니다. 새 파일이 도착하면 이전에 이동 한 파일을 삭제합니다.

2

시작시 파일에 아무 작업도 수행하지 마십시오.

  1. OLDNAME.tmp 또는 무엇인가라는 이름의 새 파일을 만듭니다 종료에

    이 절차를 따르십시오. 이미있는 경우 버리고 다시 작성하십시오. 당신이 MoveFileTransacted()하지 않고 Windows의 이전 버전에 붙어있는 경우

  2. MoveFileTransacted() (MSDN)

를 통해 옛 사람을 통해 새 파일의 이름을 변경, 상황이 더 복잡 : http://blogs.msdn.com/b/adioltean/archive/2005/12/28/507866.aspx


참고 : POSIX 호환 파일 시스템에서 자신을 발견하면 표준 이름 바꾸기 작업이 원자적일 수 있으므로 2 단계를 간단하게 수행 할 수 있습니다.

관련 문제