2009-06-04 130 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