2009-06-04 17 views
0

誰もこのエラーで光を投げることができますか?実行時エラー

型 'System.Runtime.InteropServices.COMException' の未処理の例外はSTUB_CREATOR.exeで発生

追加情報:これは、エラーを作成するラインである

0x800A0036(CTL_E_BADFILEMODE):HRESULTからの例外

Dim f As New Scripting.FileSystemObject 
starter = f.OpenTextFile(stub_path.Text + "\" + cpp_file, Scripting.IOMode.ForWriting) 

私は以前にこのファイルを開いて書き込みました。しかし、私はファイルに書き込んでいるテキストストリームを閉じました。ここ何かやってますか?

答えて

0

特定のエラーについては回答できませんが、なぜScripting.FileSystemObjectを使用していますか? .NETフレームワークには、あなたのために非常に多くのクラスがあります。あなたの場合は、File.OpenWriteメソッドを調べることをお勧めします。

1

ファイルは書き込み可能ですか?例えば。ファイルが最後の書き込みから閉じられているか、まだロックされています(これは、ファイルを閉じるためにガベージコレクタに頼っている場合や、FileSystemObjectのようなCOMオブジェクトを解放しても簡単に起こります)。

Process Monitorは、下にあるFileOpenの結果がどのようなものかを確認するのに非常に役立ちます。

なぜVB.netからSystem.IoではなくScriptingを使用しているのだろうか?特にSystem.Io.StreamWriter

0

OpenTextFileメソッドを使用して、テキストファイルを開きます。 OpenTextFileメソッドには、ファイルへのパスと次のいずれかの値の2つのパラメータが必要です。

読み取り用(パラメータ値= 1、定数= ForReading)。このモードで開いたファイルは、読み込みのみ可能です。ファイルに書き込むには、ForWritingまたはForAppendingモードを使用してファイルを2回目に開く必要があります。

書き込み用(パラメータ値2、定数= ForWriting)。このモードで開いたファイルには、既存のデータを置き換える新しいデータがあります。 (つまり、既存のデータは削除され、新しいデータが追加されます)。このメソッドを使用して、既存のファイルを新しいデータセットに置き換えます。

追加する場合(パラメータ値8、定数= ForAppending)。このモードで開いたファイルには、ファイルの最後に新しいデータが追加されます。このメソッドを使用して、既存のファイルにデータを追加します。

基本的にファイルを開いた場合は、ファイルを閉じてから書き込むために、ファイルを再度開く必要があります。

http://technet.microsoft.com/en-us/library/ee198716.aspx

あなたは、VB.NETを使用している代わりに、System.IOを使用しなければならないので。

Dim mydocpath As String = _ 
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 
Dim sb As New StringBuilder() 

For Each txtName As String _ 
    In Directory.EnumerateFiles(mydocpath, "*.txt") 
    Using sr As New StreamReader(txtName) 
     sb.AppendLine(txtName.ToString()) 
     sb.AppendLine("= = = = = =") 
     sb.Append(sr.ReadToEnd()) 
     sb.AppendLine() 
     sb.AppendLine() 

    End Using 
Next 

Using outfile As New StreamWriter(mydocpath & "\AllTxtFiles.txt") 
    outfile.Write(sb.ToString()) 
End Using 

http://msdn.microsoft.com/en-us/library/6ka1wd3w.aspx