2009-06-04 131 views
0

任何人都可以拋出這個錯誤?運行時錯誤

'System.Runtime.InteropServices.COMException' 類型的未處理的異常發生在STUB_CREATOR.exe

其他信息:從HRESULT異常:0x800A0036(CTL_E_BADFILEMODE)

這是創建錯誤的行

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?特別是System.Io.StreamWriter

0

使用OpenTextFile方法打開文本文件。 OpenTextFile方法需要兩個參數:文件路徑和下列其中一個值:

用於讀取(參數值= 1,常量= ForReading)。以此模式打開的文件只能從中讀取。要寫入文件,您必須使用ForWriting或ForAppending模式再次打開它。

寫入(參數值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