C# 如何正确创建在windows中打开的临时文件?

C# 如何正确创建在windows中打开的临时文件?,c#,.net,winforms,C#,.net,Winforms,好的,我有一些代码在相当长的一段时间内运行良好。然而,在一个网站上,我们的用户报告了一个错误,这是特定于rtf文档的,但我看不出该错误与该扩展有何关联 string filename = System.IO.Path.GetTempFileName() + "." + fileext; File.WriteAllBytes(filename, filecontent); var process = Process.Star

好的,我有一些代码在相当长的一段时间内运行良好。然而,在一个网站上,我们的用户报告了一个错误,这是特定于rtf文档的,但我看不出该错误与该扩展有何关联

            string filename = System.IO.Path.GetTempFileName() + "." + fileext;
            File.WriteAllBytes(filename, filecontent);

            var process = Process.Start(filename);
错误是这样的:

UnauthorizedAccessException: Access to the path 'C:\Users\admargosy\AppData\Local\Temp\180\tmp3D08.tmp.rtf' is denied.
Inner exception stack:
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
System.IO.File.InternalWriteAllBytes(String path, Byte[] bytes, Boolean checkHost)
到目前为止,用户已确认,如果是pdf文件,则不会出现任何问题。它开得很好。Rtf文件被此错误卡住。我有点需要知道如何分析这件事,或者知道这里发生了什么


应用程序位于WinForms中,正在终端服务器上远程运行

此代码适用于我:

string fileext = "txt";
byte[] filecontent = Encoding.UTF8.GetBytes("Hello, world!");
string filename = System.IO.Path.GetTempFileName() + "." + fileext;
File.WriteAllBytes(filename, filecontent);
var process = Process.Start(filename);
它写的是文本<代码>你好,世界到一个temp
.txt
文件,并通过shell打开它(在干净的系统上可能会在记事本中打开)


在示例代码和相关错误中: 我将调查
\180\
片段是如何进入您的路径的。考虑到您提供的代码,它不应该在那里。你的例子有些可疑

C:\Users\admargosy\AppData\Local\Temp\180\tmp3D08.tmp.rtf


我希望
GetTempFileName
返回的内容看起来更像
C:\Users\admargosy\AppData\Local\Temp\tmp3D08.tmp

可能太本地化了,无法真正回答。但是,请查看这些rtf文件的ACL并查看权限。您可能必须修复权限并重试,然后查看问题是否返回.Rtf文件驻留在数据库中。此方法创建一个临时文件,以便用户可以查看内容。通过使用GetTempFileName,我希望我不会遇到权限问题。我也会这样做,但会遇到疑难解答。然而,也许这些文件是意外创建的,它们会奇怪地设置烫发。例如,权限可以存储在您正在使用的文件流中。或者可能是一些团体的恶意软件扫描器曾经做过一些疯狂的事情。不管怎样,我都会先研究问题,而不是代码,因为这里的代码非常简单、标准,不应该这样做。文件名中的
180
与您显示的行不匹配。为什么
GetTempFileName
要创建子文件夹(请参见)?您滥用了
GetTempFileName()
方法,可能会导致您使用已经存在的临时文件(因为您正在为临时文件名添加后缀,而Windows没有检查具有该名称的现有文件)。这在实践中不太可能引起问题,但为了安全起见,如果按如下方式创建临时文件名,会发生什么情况<代码>字符串文件名=Path.Combine(Path.GetTempPath(),Guid.NewGuid().ToString(“N”))+“+fileext我没有太多考虑那个片段。我想这是实施的一部分。但是另一个用户说我在某种程度上作弊,因为我在文件名上添加了扩展名。该方法检查并创建了一个没有扩展名的文件。@Nezreli是的,这有点像作弊。这就像去酒店要一间空房,他们告诉你“345房间免费”,你说“好的,我要3456房间”。