在其中一个案例中我得到了 {i}尝试创建文件并使用vb.net中的文件系统对象写入数据时<{1}}
Exception from HRESULT: 0x800A0046 (CTL_E_PERMISSIONDENIED)
如何解决这个问题,请提出建议。
答案 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,就会锁定在文件系统上。