2014-09-22 219 views
2

我正在使用GetTempFileName()将字节从数据库写入临时文件。这些文件通常是PDF类型,但是,它们可以并且确实有所不同。GetTempFileName()和正确的文件扩展名

我遇到了尝试Process.Start(tempPath)引发错误的问题,因为Windows无法找到与.tmp文件关联的程序。

与编写一个验证MIME类型并根据需要调整文件名的自定义方法相反,有没有在.NET中处理这种.tmp文件类型的常见/标准方法?

回答

2

我想这Reed Copsey's answer一个相关的问题可以帮助回答你:

可以扩展附加到自动生成的临时文件:

string filename = System.IO.Path.GetTempFileName() + ".pdf"; // Makes something like "C:\Temp\blah.tmp.pdf" 

File.WriteAllBytes(filename, filedata); 

var process = Process.Start(filename); 
// Clean up our temporary file... 
process.Exited += (s,e) => System.IO.File.Delete(filename); 
+0

除了现在要生成两个文件。一个作为'%temp%\​​.tmp',另一个作为'%temp%\​​.tmp.pdf'。 (就我个人而言,我会使用['FindExecutable'](http://msdn.microsoft.com/en-us/library/windows/desktop/bb776419%28v=vs.85%29.aspx)并保持杂乱) – 2014-09-22 15:03:18

+0

@BradChristie:是的,但第二个也是在temp-directory中创建的,并且会在'process.Exited'中删除。 'GetTempFileName'文件有0个字节,没有额外的命名冲突。 – 2014-09-22 15:39:04

+0

但是你仍然不允许超过65535个文件,并且你只是删除了重命名的变体而不是原始文件(尽管可以在你的lambda中轻松更改)。我只是觉得在使用shell方法时不需要使用两个文件。 – 2014-09-22 17:02:51