我正在尝试使用FileStream和FileOptions.DeleteOnClose创建一个临时文件。我正在关闭流时看到预期的行为,但是,如果引发异常,则该文件不会被删除。我不能使用using
,因为流的关闭由FileStreamResult处理。我知道在Windows上它由winapi标志FILE_FLAG_DELETE_ON_CLOSE处理,但是我不知道这是否/如何在.NET Core应用程序上的其他平台上起作用。
我尝试绕过try-catch来在错误的情况下手动处理流,该方法确实可以工作,但是应该没有必要,因为一旦释放所有句柄,文件仍然会被删除。
const FileOptions fileOptions =
FileOptions.Asynchronous |
FileOptions.DeleteOnClose |
FileOptions.Encrypted |
FileOptions.SequentialScan;
var fileStream = new FileStream(
Path.GetRandomFileName(),
FileMode.Create,
FileAccess.ReadWrite,
FileShare.None,
4096,
fileOptions);
我希望如果FileOptions.DeleteOnClose是跨平台的,则在释放所有句柄时将删除该文件,但该文件仍然存在。
最佳答案
我当前的“修补程序”是FileStream的包装,该包装立即在其上调用File.Delete(),因为它适用于UNIX系统(只要文件上有句柄,您仍然可以使用该文件),并捕获IO Windows上发生的异常。
显然,这不是我的首选解决方案,因此我将让问题持续一段时间,看看是否有人对此感兴趣。