C# Scripting.FileSystemObject写入方法失败
因此,在我的程序中,我使用COM Auotmation(Silverlight 4中的AutomationFactory)创建一个FileSystemObject,并向其写入一个字符串(内容)。本例中的内容是一个小的UTF-8XML文件,我使用MemoryStream将其序列化为字符串 字符串很好,但由于某种原因,每当我调用FileSystemObject的Write方法时,我都会得到错误“HRESULT 0x800A0005(来自google的CTL_E_ILLEGALFUNCTIONCALL)。”最奇怪的是,如果我传递另一个简单字符串,如“hello”,它就可以正常工作 有什么想法吗 或者,如果有一种方法可以公开一个带有FileSystemObject的文件/文本流,我可以直接将其序列化,那也不错(我似乎找不到VB以外的任何东西) 提前谢谢C# Scripting.FileSystemObject写入方法失败,c#,silverlight,filesystemobject,comautomationfactory,C#,Silverlight,Filesystemobject,Comautomationfactory,因此,在我的程序中,我使用COM Auotmation(Silverlight 4中的AutomationFactory)创建一个FileSystemObject,并向其写入一个字符串(内容)。本例中的内容是一个小的UTF-8XML文件,我使用MemoryStream将其序列化为字符串 字符串很好,但由于某种原因,每当我调用FileSystemObject的Write方法时,我都会得到错误“HRESULT 0x800A0005(来自google的CTL_E_ILLEGALFUNCTIONCALL
string theContent = System.Text.Encoding.UTF8.GetString(content, 0, content.Length);
string hello = "hello";
using (dynamic fsoCom = AutomationFactory.CreateObject("Scripting.FileSystemObject"))
{
dynamic file = fsoCom.CreateTextFile("file.xml", true);
file.Write(theContent);
file.Write(hello);
file.Close();
}
为什么不只是:
File.WriteAllText("file.xml", theContent, Encoding.UTF8);
甚至
File.WriteAllBytes("file.xml", content);
今天我用ADODB.Stream而不是Scripting.FileSystemObject解决了同样的问题 在Silverlight 4 OOB应用程序中(即使信任度提高),您也无法访问“MyDocuments”和其他几个与用户相关的特殊文件夹以外位置的文件。您必须使用“COM+自动化”解决方案。但是Scripting.FileSystemObject对于文本文件非常有效,它无法处理二进制文件。幸运的是,您也可以在那里使用ADODB.Stream。这可以很好地处理二进制文件。以下是我的代码,使用Word模板、.dotx文件进行了测试:
public static void WriteBinaryFile(string fileName, byte[] binary)
{
const int adTypeBinary = 1;
const int adSaveCreateOverWrite = 2;
using (dynamic adoCom = AutomationFactory.CreateObject("ADODB.Stream"))
{
adoCom.Type = adTypeBinary;
adoCom.Open();
adoCom.Write(binary);
adoCom.SaveToFile(fileName, adSaveCreateOverWrite);
}
}
文件读取可以这样做:
public static byte[] ReadBinaryFile(string fileName)
{
const int adTypeBinary = 1;
using (dynamic adoCom = AutomationFactory.CreateObject("ADODB.Stream"))
{
adoCom.Type = adTypeBinary;
adoCom.Open();
adoCom.LoadFromFile(fileName);
return adoCom.Read();
}
}
我只是想问。。。你为什么在这里使用FSO?基本上,我正在用Silverlight(面向.NET应用程序的OOB Silverlight前端)做一些非常有趣的事情,所以我只限于AutomationFactory可以生产的东西。Silverlight应用程序没有足够的权限。