【发布时间】:2011-06-28 09:10:07
【问题描述】:
正如标题所说;有没有办法在 Silverlight SaveFileDialog 中设置文件的内容类型?我还没有找到方法,如果不可能,我并不感到惊讶,只是想我问一下,看看其他人是否肯定知道。
【问题讨论】:
标签: c# silverlight-4.0 content-type savefiledialog
正如标题所说;有没有办法在 Silverlight SaveFileDialog 中设置文件的内容类型?我还没有找到方法,如果不可能,我并不感到惊讶,只是想我问一下,看看其他人是否肯定知道。
【问题讨论】:
标签: c# silverlight-4.0 content-type savefiledialog
您要查找的是上传文件的 Mime 类型。我认为这将在 Silverlight 中工作,我不明白为什么不这样做,但我从未在这种情况下使用过它。您需要添加以下内容:
using System.Reflection;
using System.Runtime.InteropServices;
[System.Runtime.InteropServices.DllImport(@"urlmon.dll", CharSet = CharSet.Auto)]
private extern static System.UInt32 FindMimeFromData(
System.UInt32 pBC,
[MarshalAs(UnmanagedType.LPStr)] System.String pwzUrl,
[MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,
System.UInt32 cbSize,
[MarshalAs(UnmanagedType.LPStr)] System.String pwzMimeProposed,
System.UInt32 dwMimeFlags,
out System.UInt32 ppwzMimeOut,
System.UInt32 dwReserverd
);
public void SomeMethod(string fileName)
{
string mimeType = getMimeFromFile(fileName);
if (mimeType == "text/plain")
{
// do something
}
}
private string getMimeFromFile(string filename)
{
if (!File.Exists(filename))
throw new FileNotFoundException(filename + " not found");
byte[] buffer = new byte[256];
using (FileStream fs = new FileStream(filename, FileMode.Open))
{
if (fs.Length >= 256)
fs.Read(buffer, 0, 256);
else
fs.Read(buffer, 0, (int)fs.Length);
}
try
{
System.UInt32 mimetype;
FindMimeFromData(0, null, buffer, 256, null, 0, out mimetype, 0);
System.IntPtr mimeTypePtr = new IntPtr(mimetype);
string mime = Marshal.PtrToStringUni(mimeTypePtr);
Marshal.FreeCoTaskMem(mimeTypePtr);
return mime;
}
catch (Exception ex)
{
return ex.Message;
}
}
【讨论】:
this.dialog = new SaveFileDialog();
try
{
this.dialog.DefaultExt = ".txt";
this.dialog.Filter = "Text Files|*.txt|Log Files|*.log|All Files|*.*";
this.dialog.FilterIndex = 2;
}
catch ( Exception ex )
{
this.tblError.Text = "Error configuring SaveFileDialog: " + ex.Message;
}
【讨论】: