Ошибка выполнения - PullRequest
0 голосов
/ 04 июня 2009

Может ли кто-нибудь пролить свет на эту ошибку?

Необработанное исключение типа «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)

Я только что ранее открыл файл для записи. но тем не менее я закрыл текстовый поток, с которым я писал в файл. я делаю что-нибудь здесь?

Ответы [ 3 ]

1 голос
/ 04 июня 2009

Доступен ли файл для записи? Например. был ли файл закрыт после последней записи или он все еще заблокирован (это может легко произойти, если вы используете сборщик мусора для закрытия файла или даже для освобождения COM-объекта, например FileSystemObject).

Process Monitor может быть очень полезно увидеть, каков результат базового FileOpen.

Интересно, почему на VB.net вы используете сценарии, а не System.Io? Особенно System.Io.StreamWriter?

0 голосов
/ 05 июля 2011

Используйте метод 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

0 голосов
/ 04 июня 2009

Я не могу ответить на конкретную ошибку, но почему вы используете Scripting.FileSystemObject? В .NET Framework так много классов, которые сделают эту работу за вас. В вашем случае я бы посоветовал изучить метод File.OpenWrite .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...