运行时错误

时间:2009-06-04 10:32:33

标签: vb.net visual-studio-2005

任何人都可以解释这个错误吗?

STUB_CREATOR.exe中发生未处理的“System.Runtime.InteropServices.COMException”类型异常

附加信息:来自HRESULT的异常:0x800A0036(CTL_E_BADFILEMODE)

这是产生错误的行

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

我刚刚打开文件进行写作。但是我已经关闭了我写入文件的文本流。我在这做任何事吗?

3 个答案:

答案 0 :(得分:1)

文件是否可写?例如。文件是从上次写入时关闭还是仍然被锁定(如果依靠垃圾收集器关闭文件甚至释放像FileSystemObject这样的COM对象,这很容易发生。)

Process Monitor可以帮助您查看基础FileOpen的结果。

有人想知道为什么从VB.net开始使用Scripting而不是System.Io?特别是System.Io.StreamWriter

答案 1 :(得分:0)

我无法回答具体错误,但为什么使用Scripting.FileSystemObject? .NET框架中有很多类可以帮助您完成工作。在您的情况下,我建议您查看File.OpenWrite方法。

答案 2 :(得分: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