Pregunta

En mi proyecto, tengo que crear algunos archivos temporales en un dispositivo USB, que quiero eliminar al cerrar. Entonces usé un código como

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

Funciona bien. Pero el problema es que quiero usar una FileOption más, como Sin almacenamiento en búfer.

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);

Pero no elimina el archivo después de cerrar. Por favor ayuda.

¿Fue útil?

Solución

Debe usar | en lugar de & amp; .

Estos son indicadores binarios, y cuando dices & amp; , los enmascaras de manera efectiva, lo que no tiene ninguna opción.

Otros consejos

Use FileOptions.DeleteOnClose | FILE_FLAG_NO_BUFFERING el & amp; los cancela.

FILE_FLAG_NO_BUFFERING & amp; FileOptions.DeleteOnClose devuelve FileOptions.None

Intente incluir el indicador WriteThrough también en una lista con | operador. Consulte este KB sobre los requisitos para usar FILE_FLAG_NO_BUFFERING . Es interesante que MS no haya incluido esta bandera en la enumeración. ¿Hay alguna razón por la cual WriteThrough no hace lo que necesita en este escenario? ¿Estás intentando escribir datos seguros?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top