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 Framework のマネージ ライブラリを使用すると、より適切なエラー情報が得られます。たとえば、次のようにするだけで、まったく同じことを実現できます。

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) が発生します。

EDIT:: MSDN によると: 上記のコードでは、CreateObject 関数は FileSystemObject (fs) を返します。次に、CreateTextFile メソッドがファイルを TextStream オブジェクトとして作成し (a)、WriteLine メソッドが作成されたテキスト ファイルに 1 行のテキストを書き込みます。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 に答える