如何使用vb.net解决系统安全性异常

时间:2012-07-17 14:26:46

标签: vb.net filesystemobject

在其中一个案例中我得到了  {i}尝试创建文件并使用vb.net中的文件系统对象写入数据时<{1}}

Exception from HRESULT: 0x800A0046 (CTL_E_PERMISSIONDENIED)

如何解决这个问题,请提出建议。

2 个答案:

答案 0 :(得分:0)

使用旧版COM FileSystemObject,除非绝对必要,否则是个坏主意。使用.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

答案 1 :(得分: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,就会锁定在文件系统上。