我用来在数据库的byte []中存储文件/文件,我希望用户可以从我的应用程序中查看/运行该文件。
答案 0 :(得分:4)
您需要知道正在编写的文件的文件扩展名,因此操作系统可以根据扩展名运行默认程序。代码将是这样的:
byte[] bytes = GetYourBytesFromDataBase();
string extension = GetYourFileExtension(); //.doc for example
string path = Path.GetTempFileName() + extension;
try
{
using(BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create)))
{
writer.Write(yourBytes);
}
// open it with default application based in the
// file extension
Process p = System.Diagnostics.Process.Start(path);
p.Wait();
}
finally
{
//clean the tmp file
File.Delete(path);
}
答案 1 :(得分:1)
您还需要将文件扩展名存储在数据库中。如果您没有文件扩展名,则问题变得非常困难,因为您无法依赖操作系统来确定要启动哪个程序来处理该文件。
您可以使用以下模式:
当您使用原始文件扩展名保存文件时,操作系统将查找为扩展程序注册的程序以打开文件。
答案 2 :(得分:0)
正如chibacity和Daniel建议的那样,将文件扩展名存储在数据库中并同意 - 存储文件扩展名,或者至少是一些告诉你文件类型的指示符,这是一个好主意。
如果这些文件的格式是您自己创建的,那么您可能还希望存储有关存储数据的文件格式的版本的信息。开发文件格式很容易改变,如果你不记得用来存储数据的版本,那么你就很难恢复信息。
一般来说,对象持久性也面临同样的问题。