0

在一种情况下, Exception from HRESULT: 0x800A0046 (CTL_E_PERMISSIONDENIED)当我尝试使用 vb.net 中的文件系统对象创建文件和写入数据时,我得到了

DIM fso,file
const ForWriting = 2
fso = CreateObject("Scripting.FileSystemObject")
file= fso.opentextfile("C:\test\log.csv",ForWriting,True)
file.write("This,is,a,sampledata")
file.close()

我该如何解决这个问题,请指教。

4

2 回答 2

1

FileSystemObject除非绝对必要,否则使用旧版 COM是个坏主意。使用 .NET 框架中的托管库将为您提供更好的错误信息。例如,您只需执行以下操作即可完成完全相同的事情:

Try
    File.WriteAllText("C:\test\log.csv", "C:\test\log.csv")
Catch ex As Exception
    ' Handle the exception.  See ex.ToString() for full info.
End Try
于 2012-07-17T15:28:02.777 回答
0

我遇到了与 JScript 相同的问题,但前提是我之前创建了文件。

var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateTextFile(filename);

如果文件已经存在,我可以读取或写入文件。

var fso = new ActiveXObject("Scripting.FileSystemObject");

// Create the file, and obtain a file object for the file.
var filename = "testfile.txt";

//here no create! --> fso.CreateTextFile(filename);
var fileObj = fso.GetFile(filename);

// Open a text stream for output.
var ts = fileObj.OpenAsTextStream(ForWriting, TristateUseDefault);

// Write to the text stream.
ts.WriteLine("Hello World!");
ts.WriteLine("The quick brown fox");
ts.Close();

它有效,但如果您知道所需的文件,这是一种解决方法。否则你会得到 System.Security.SecurityException: HRESULT: 0x800A0046 (CTL_E_PERMISSIONDENIED)。

编辑:: MSDN 说:在上面显示的代码中,CreateObject 函数返回 FileSystemObject (fs)。然后 CreateTextFile 方法将文件创建为 TextStream 对象 (a),WriteLine 方法将一行文本写入创建的文本文件。Close 方法刷新缓冲区并关闭文件。

所以我尝试了这个,它对我有用:

var ForReading = 1, ForWriting = 2, ForAppending = 8;
var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;

var fso = new ActiveXObject("Scripting.FileSystemObject");

// Create the file, and obtain a file object for the file.
var filename = "testfile.txt";
var tss = fso.CreateTextFile(filename);
tss.close();
var fileObj = fso.GetFile(filename);

// Open a text stream for output.
var ts = fileObj.OpenAsTextStream(ForWriting, TristateUseDefault);

// Write to the text stream.
ts.WriteLine("Hello World!");
ts.WriteLine("The quick brown fox");
ts.Close();

创建文件后,您必须先将其关闭,因为 createFileMethod 将文件创建为 TextStream 对象。只要它是作为 TextStream 创建的,它就被锁定在文件系统上。

于 2015-06-25T06:57:28.763 回答