2016-12-13 1 views
0

나는 여러 번이 문제를 겪어 왔지만 지금까지 만족스러운 해결책을 찾지 못했습니다 (컴퓨터를 다시 시작하는 데 15 분이 걸리면 상당히 짜증납니다 ...) :스트림이 손실되어 파일을 차단하면 어떻게해야합니까?

파일로 프로그래밍 할 때, 파일 스트림을 사용해야합니다. 그들과 관련된 문제는 (최소한 C#에서는) 파일을 다른 곳에서 액세스하기 전에 다시 릴리스해야한다는 것입니다. 이것은 물론 좋은 생각이기 때문에, 프로그래밍 및 디버깅 과정에서 파일을 릴리스하는 것을 잊어 버렸거나 스트림이 닫히기 전에 프로그램이 충돌하는 것을 몇 번이나 저에게 알았습니다.

창 기능이나 뭐 그런를 사용하는 스트림을 찾아 죽일 수있는 방법이 있습니까? C#뿐만 아니라 C++에서도 문제가 발생했습니다 (또는 C, 나는 더 이상 확신하지 못합니다).


내가 읽은 답변에서 스트림이 올바르게 처리되면 발생하지 않아야합니다. 그러나 내가 올바르게 처리하기 위해 멍청하고 스트림이 제대로 닫히지 않으면 어떻게 될까요? (이유가 무엇이든)? PC가 작동하는 동안이 문제를 해결할 수있는 방법이 있습니까?

+8

이 문제가되지 않습니다. 운영 체제는 프로세스가 종료 될 때 열려 있던 모든 파일 핸들을 해제합니다. 응용 프로그램이 정상적으로 실행되면'using' 블록을 사용하여 이러한 관리되지 않는 리소스가 제대로 릴리스되는지 확인합니다. –

답변

4

이 문제가되지 않습니다. 응용 프로그램이 정상적으로 실행되면

, 당신은 다음과 같은 관리되지 않는 리소스가 제대로 해제되는 것을 보장하기 위해 using 블록을 사용합니다. 이것은 IDisposable 인터페이스를 구현하는 모든 객체에 필요합니다. 이것이 실패하면

, 운영 체제가 뛰어와 베이컨을 저장합니다. OS는 프로세스가 종료 할 때 열려 있던 파일 핸들을 자동으로 해제하므로 응용 프로그램이 충돌하더라도 문제는 없습니다. (스트림을 포함)을 IDisposable 인터페이스를 구현

3

항상이 중 하나 using 블록 표로 또는 클래스의 멤버되어야 차례로 IDisposable 자체를 구현 (새 Dispose() 방법은 호출 회원의 Dispose() 방법). 이것에 대한 컴파일러 경고가 있어야합니다.

는이 작업을 수행하고 파일 잠금 제대로 해제됩니다.

관련 문제