2009-06-04 12 views
0

Kann jemand pls Licht auf diesen Fehler werfen?Laufzeitfehler

Eine nicht behandelte Ausnahme des Typs 'System.Runtime.InteropServices.COMException' aufgetreten in STUB_CREATOR.exe

Zusätzliche Informationen: Ausnahme von HRESULT: 0x800A0036 (CTL_E_BADFILEMODE)

Dies ist die Linie, die den Fehler erzeugt

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

Ich habe gerade die Datei zum Schreiben geöffnet. aber ich habe den textstream, mit dem ich in die Datei geschrieben habe, geschlossen. mache ich hier irgendwas?

Antwort

0

Ich kann nicht auf den spezifischen Fehler antworten, aber warum verwenden Sie Scripting.FileSystemObject? Es gibt so viele Klassen im .NET-Framework, die die Aufgabe für Sie übernehmen. In Ihrem Fall würde ich vorschlagen, in die File.OpenWrite Methode zu schauen.

1

Ist die Datei beschreibbar? Z.B. Wurde die Datei seit dem letzten Schreibvorgang geschlossen oder ist sie immer noch gesperrt (dies könnte leicht passieren, wenn Sie auf den Garbage Collector angewiesen sind, um die Datei zu schließen oder sogar ein COM-Objekt wie FileSystemObject freizugeben).

Process Monitor kann sehr hilfreich sein, um zu sehen, was das Ergebnis der zugrunde liegenden FileOpen ist.

Man fragt sich, warum von VB.net Sie Scripting statt System.Io verwenden? Insbesondere System.Io.StreamWriter?

0

Verwenden Sie die OpenTextFile-Methode, um die Textdatei zu öffnen. Die OpenTextFile-Methode benötigt zwei Parameter: den Pfad zur Datei und einen der folgenden Werte:

Zum Lesen (Parameterwert = 1, Konstante = ForReading). Dateien, die in diesem Modus geöffnet sind, können nur gelesen werden. Um in die Datei zu schreiben, müssen Sie sie ein zweites Mal öffnen, indem Sie entweder den ForWriting- oder den ForAppending-Modus verwenden.

Zum Schreiben (Parameterwert 2, Konstante = ForWriting). Dateien, die in diesem Modus geöffnet werden, ersetzen neue Daten durch vorhandene Daten. (Das heißt, vorhandene Daten werden gelöscht und die neuen Daten hinzugefügt.) Verwenden Sie diese Methode, um eine vorhandene Datei durch eine neue Datengruppe zu ersetzen.

Zum Anhängen (Parameterwert 8, Konstante = ForAppending). Dateien, die in diesem Modus geöffnet werden, werden am Ende der Datei mit neuen Daten versehen. Verwenden Sie diese Methode, um Daten zu einer vorhandenen Datei hinzuzufügen.

Grundsätzlich, wenn Sie eine Datei öffnen, müssen Sie es schließen und dann wieder zum Schreiben öffnen, wenn Sie darauf schreiben wollen.

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

Da Sie VB.NET verwenden Sie sollten stattdessen mit System.IO sein.

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