2009-09-18 4 views
7

내 프로젝트에서 USB 장치에 임시 파일을 만들어야하는데,이 파일은 닫을 때 삭제하려고합니다. 그래서 나는 같은 코드를 사용했습니다.DeleteOnClose 파일 옵션이있는 FileStream

this.fcommandHandler = new FileStream(TempFileName, 
FileMode.CreateNew, FileAccess.ReadWrite, 
FileShare.ReadWrite, 512, FileOptions.DeleteOnClose); 

잘 작동합니다. 하지만 문제는 하나 이상의 FileOption을 사용하고 싶습니다 (예 : 버퍼링 없음).

private const FileOptions FILE_FLAG_NO_BUFFERING = (FileOptions)0x20000000; 

this.fcommandHandler = new FileStream(TempFileName, 
FileMode.CreateNew, FileAccess.ReadWrite, 
FileShare.ReadWrite, 512, FileOptions.DeleteOnClose & FILE_FLAG_NO_BUFFERING); 

하지만 파일을 닫은 후에 삭제하지 않습니다. 도와주세요.

답변

8

| & 대신.

이들은 이진 플래그이며, &라고 말하면 효과적으로 마스크가 제거되어 옵션이 전혀 없습니다.

+0

하지만 "IO 작업이 작동하지 않습니다. 파일을 너무 길거나 동기화 IO 작업을 지원하기 위해 핸들이 열리지 않았습니다."예외가 발생했습니다. & 대신에 this.fcommandHandler.Close()를 호출 할 때 – Anuraj

+1

@Anuraj : 그건 의미는 아닙니다. 당신의 사용법에 잘못된 것이 있음을 의미합니다. Lasse는 당신이 필요로하는 것이 맞아요. 대신에 &. 예외는 해결할 다음 문제입니다. –

+0

@ Jeff Yates : 감사합니다. 다른 옵션으로 시도해 보겠습니다. – Anuraj

2

사용 FileOptions.DeleteOnClose | FILE_FLAG_NO_BUFFERING이 (가) &이면 취소됩니다. |

FILE_FLAG_NO_BUFFERING &는 FileOptions.DeleteOnClose은을 사용하여 목록에서뿐만 아니라 WriteThrough 플래그를 포함 FileOptions.None

+0

첫 번째 답변의 댓글을 확인하십시오. – Anuraj

+0

@Anuraj : File_flag_no_buffering이 무엇인지 알아 내려고하고 있습니다. DeleteOnClose가 또는 대신에 and를하고 있기 때문에 확실히 호출되지 않습니다. –

+0

@Yuriy Faktorovich - File_flag_no_buffering 파일 옵션은 Windows에서 파일을 읽고 쓸 때 파일 캐싱을 피하는 데 도움이되는 파일 옵션입니다. 이것을 확인하십시오 http://stackoverflow.com/questions/122362/how-to-empty-flush-windows-read-disk-cache-in-c – Anuraj

0

시도를 반환 운영자. FILE_FLAG_NO_BUFFERING을 사용하기위한 요구 사항은 KB을 참조하십시오. MS가이 플래그를 enum에 포함시키지 않았다는 것이 흥미 롭습니다. WriteThrough이이 시나리오에서 필요한 것을 수행하지 않는 이유가 있습니까? 안전한 데이터를 쓰려고하십니까?

+0

@AnthonyWJones :이 시도했지만 여전히이 오류가 발생합니다. 나는 달성하려고 노력하고있다 : 파일 (예 : cmd.bin) 장치를 통해 USB에 몇 가지 명령을 발급해야하며 파일 (예 : res.bin)에서 일부 응답을 반환합니다. 그러나 정상적인 C# 스트림을 사용하면 Windows에서 응답을 캐시하고 항상 동일한 응답을 얻을 것이므로 No Buffering 플래그를 사용해야합니다. 그리고 파일은 일시적이므로 사용 후 삭제해야합니다. 삭제 플래그를 사용하고있는 이유는 무엇입니까? – Anuraj

+0

그런 경우 유리가 당신에게 지시 한 질문은 그런 파일을 여는 다른 접근법을 가지고 있습니다. – AnthonyWJones