任何人都可以解释这个错误吗?
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)
我刚刚打开文件进行写作。但是我已经关闭了我写入文件的文本流。我在这做任何事吗?
答案 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