저는 파일에 데이터를 쓰는 것을 만들고 있습니다. 이제 내가 직면하고있는 문제는 응용 프로그램이 종료되고 파일 쓰기 작업이 중간에 매달려 있다는 것입니다. 나는 일련의 사물들이 완전히 쓰여지거나 전혀 쓰이지 않기를 원한다. 그러나 응용 프로그램이 종료되고 그 중 절반 만 가끔 작성됩니다. 내가 여기서 뭘 잘못하고 있는지에 대한 제안은? 감사.응용 프로그램이 중간에 파일 작업을 남기지 않고 종료하는 것을 방지합니다.
답변
여기에 갈 정도가 아니다 ...하지만 ...
당신은 제대로 파일 스트림을 플러시하고 있습니까?완전히 완성되기 전에 프로그램을 끝내고 있지만 닫을 수는 있습니다.
매우 정확한 경우 스트림이 작성되는 즉시 플러시하고 매우 일반적인 방법이므로 응용 프로그램이 –
+1에서 무 바시르의 제안 (작성된 즉시 플러시)을 종료하면 파일이 제대로 닫혀 있는지 확인하십시오. 나중에 성능 문제가 발생할 수도 있지만, 여러 가지 방법으로 플러싱을 조절할 수있는 것은 쉽지만, 계획 단계에서 걱정할 필요가없는 것은 아닙니다. 기능적으로 정확한 프로그램> 빠른 프로그램 !! :) – corsiKa
try {
// Open file, start writing...
}
catch (Exception e)
{
// Close file and discard it (if that's what you want), log error with e.ToString()
}
// Close file
당신은 아마 try
/catch
블록에 걸려와 "먹을"되는 예외가 있습니다. 디버거 (Debug-> Exceptions-> Common Language Runtime)에서 예외 처리를 활성화하고 두 확인란을 모두 선택하십시오.
Hehehe는 붙잡았다 :) 화요일의 아침에 나를 미소 짓게했던 미안! – corsiKa
예를 들어 WinForm
을 봅시다. 사용자가 Click 이벤트 (또는 Form_Closing 같은 다른 이벤트)에서 오른쪽 상단 모서리에있는 X
버튼 (또는 다른 버튼을 클릭하여 종료)을 클릭하면 File_Operation_Thread의 상태를 확인합니다 (나는 Thread
/파일을 조작하려면 BackgroundWorker
을 입력하십시오. 그렇지 않으면 UI가 중단됩니다. 스레드가 실행 중이면 "작업을 처리 중입니다"라는 대기/취소 단추가있는 대화 상자를 표시하십시오. 최종 구현은 다음과 같습니다.
BackgroundWorker worker = new BackgroundWorker();
void WriteButton_Clicked(object sender, EventArgs args)
{
//start writing to the file asynchronously, something like
//worker.DoWork += (s,e) => { /*writing to file*/ };
}
void ExitButton_Clicked(object sender, EventArgs args)
{
if (worker.IsBusy)
{
//show a dialog window
if (CANCEL)
{
worker.CancelAsync();
//but rolling the changes back is a nightmare!!
}
else
{
//exit the applcation when worker.RunWorkerCompleted
}
}
}
- 1. 흔적을 남기거나 남기지 않고
- 2. 간격을 남기지 않고 div 정렬
- 3. read_input에 기록을 남기지 않고 raw_input
- 4. iPhone 응용 프로그램이 충돌하고 .crash 로그 파일을 남기지 않습니다.
- 5. 소프트 키보드가 해제되는 것을 방지합니다.
- 6. 충돌하는 두 개의 Firefox 확장 프로그램이 동시에 설치되는 것을 방지합니다.
- 7. 감사 기록을 남기지 않고 웹 사이트 공격
- 8. C# Enabled = false를 사용하지 않고 폼에서 클릭하는 것을 방지합니다.
- 9. setSpacing을 사용하지 않고 갤러리 이미지가 겹치는 것을 방지합니다.
- 10. JAXB : 클래스가 재생성되는 것을 방지합니다.
- 11. ExtJS treenodes가 접히는 것을 방지합니다.
- 12. 응용 프로그램이 창 관리 관련 작업을 수행해야합니까?
- 13. 안드로이드 ProgressDialog가 전체 화면을 검게하는 것을 방지합니다.
- 14. Android에서 활동이 포커스를 잃는 것을 방지합니다.
- 15. 바인딩은 Visio 이벤트가 발사되는 것을 방지합니다.
- 16. Django에서 파일 업로드 : FileField가 데이터베이스의 전체 경로를 쓰는 것을 방지합니다.
- 17. 안드로이드 응용 프로그램이 끊어지는 것을 방지 하시겠습니까?
- 18. LinkButton이 UpdatePanel 내에서 더블 클릭하는 것을 방지합니다.
- 19. C++ win32 컨텍스트 메뉴가 닫히는 것을 방지합니다.
- 20. 파일 중간에 덮어 쓰기
- 21. 체크 박스를 클릭하면 OptionsMenu가 닫히는 것을 방지합니다.
- 22. Ghostscript가 표준 출력에 오류를 쓰는 것을 방지합니다.
- 23. iOS 근접 센서가 화면을 검게하는 것을 방지합니다.
- 24. mpmovieplayer에서 전체 화면 모드를 종료하는 동안 응용 프로그램이 충돌합니다.
- 25. 레일에서 사용자가 여러 번 투표하는 것을 방지합니다.
- 26. Silverlight IsolatedStorage : 삭제 기능이 작동하지 않고 빈 공간을 남기지 않습니다.
- 27. iPad 응용 프로그램이 모든 것을 로컬에 가지고 있으면 좋습니까?
- 28. jQuery가 시작되기 전에 실행되는 작업을 방지합니다.
- 29. 응용 프로그램이 비디오 스트림을 종료하지 않고 종료합니다.
- 30. UART 초기화 : UART가 RTS를 높이는 것을 방지합니다.
** ** 응용 프로그램이 종료되는 이유는 무엇입니까? 예외가 발생 했습니까? (있는 경우 어떤 것입니까?) 또는 종료하라는 지시 *입니까? –