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 として作成されている限り、ファイルシステム上でロックされます。