gpt4 book ai didi

c# - Scripting.FileSystemObject 写入方法失败

转载 作者:行者123 更新时间:2023-11-30 21:20:05 26 4
gpt4 key购买 nike

所以在我的程序中,我使用 COM Auotmation(Silverlight 4 中的 AutomationFactory)创建一个 FileSystemObject,我向其写入一个字符串 (theContent)。在本例中,theContent 是一个小型 UTF-8 XML 文件,我使用 MemoryStream 将其序列化为字符串。

字符串很好,但由于某种原因,每当我调用 FileSystemObject 的 Write 方法时,我都会收到错误“HRESULT 0x800A0005(来自 google 的 CTL_E_ILLEGALFUNCTIONCALL)”。最奇怪的是,如果我传递另一个简单的字符串,比如“hello”,它就没有问题。

有什么想法吗?

或者,如果有一种方法可以使用我可以直接序列化的 FileSystemObject 公开文件/文本流,那也很好(我似乎找不到任何不在 VB 中的东西)。

提前致谢!

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();
}

最佳答案

我今天使用 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();
}
}

关于c# - Scripting.FileSystemObject 写入方法失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3462039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com