我正在尝试使用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上发生的异常。

显然,这不是我的首选解决方案,因此我将让问题持续一段时间,看看是否有人对此感兴趣。

08-27 17:34