Как я могу создавать файлы (автоматически) через программу vb.net, которые служат входными данными для других программ?

У меня есть программа, которая использует пользовательский ввод для автоматического создания файлов, необходимых для процесса загрузки. Это файлы .bas (программа qbasic) и .lot (файл автомата voxco). Файлы созданы отлично, синтаксис безупречен. Когда я пытаюсь запустить пакетные файлы, которые запускают основную программу и файлы лотов, они ломаются. Программы (voxco и базовые), похоже, не умеют читать файлы. Я в растерянности. Я не думаю, что это кодировка. Я думаю, что моя программа VB.net создает текстовый файл с расширениями «.lot» и «.bas», а две другие программы не знают, как с этим справиться. Но я понятия не имею, как создать правильные файлы, кроме как назвать их .lot и .bas. У кого-нибудь есть опыт в этом?

Вот часть кода, который создает файл .LOT:

'Create a copy of the old lot file
        My.Computer.FileSystem.CopyFile(LotFilePath & OldStudy & ".LOT", LotFilePath & "BackEnd\" & OldStudy & ".LOT")
        System.IO.File.Create(LotFilePath & "BackEnd\" & StudyID & ".LOT").Dispose()



        Dim LotText As String
        LotText = Text to put into LOT file
        Dim QuLines As String = Nothing
        Dim Reader As New StreamReader(LotFilePath & OldStudy & ".LOT")
        Dim SLine As String = Nothing
        While Not Reader.EndOfStream
            SLine = Reader.ReadLine()
            If SLine.StartsWith("*QU") Then
                QuLines = QuLines & SLine & vbCrLf
            End If
        End While
        LotText = LotText & QuLines

        Dim TempPath As String
        TempPath = LotFilePath & "BackEnd\" & StudyID & ".LOT"
        My.Computer.FileSystem.WriteAllText(TempPath, LotText, 0)

А вот код, который создает файл BAS:

Dim BasText As String = Nothing
        BasText = Text to input into BAS file
        TempPath = BasFilePath & StudyID & ".BAS"
        My.Computer.FileSystem.WriteAllText(TempPath, BasText, 0)

person user2824979    schedule 27.09.2013    source источник
comment
Насколько я помню, файлы qbasic представляют собой просто кодировку ascii, поэтому вы должны иметь возможность открывать/редактировать/создавать их в блокноте и т.п. Расширение не очень важно, так что это не так. Можете ли вы показать код того, как вы запускаете базовую программу, и объяснить, что вы подразумеваете под ее поломкой? Вы получаете ошибку или что-то в этом роде?   -  person Steve    schedule 28.09.2013
comment
Боюсь, сейчас у меня нет доступа к этим файлам, но код, который запускает программу qbasic, — это просто path\qbasicexecutable /run \path\.basfile. Это пакетный файл msdos. Когда запускается строка qbasic, программа qbasic открывается (обычно она работает в фоновом режиме) и говорит что-то об отсутствующем выражении (извините, я знаю, что это не очень полезно!) и зависает. Как только я выхожу из этого, аналогичная строка в командном файле запускает приложение voxco, которое запускается, но не загружает файл, который должен указать файл лота. Он немедленно заканчивается, и пакетный файл переходит к следующему элементу.   -  person user2824979    schedule 28.09.2013
comment
Отличная информация, приводит меня к моему следующему вопросу (извините, пока нет ответа). Есть ли в вашем пути для LotFilePath или BasFilePath пробелы или специальные символы?   -  person Steve    schedule 28.09.2013


Ответы (1)


Вот что можно попробовать:

  1. Убедитесь, что в программе Basic в конце каждой строки стоит vbCrLf.
  2. Нужны ли qBasic номера строк? (не помню)
  3. Попробуйте войти в qBasic и вручную загрузить базовый файл, сгенерированный вашим приложением. У вас есть правильный список? Что происходит, когда вы пытаетесь выполнить его?
  4. Введите первые несколько строк базовой программы в qBasic, затем сохраните ее. Используйте шестнадцатеричный редактор (например, hexedit), чтобы сравнить этот файл с базовым файлом, созданным приложением. Если есть разница, можно исправить.
  5. Если базовый файл запускается вручную, то проблема может быть в пакетном файле. Можете ли вы вручную создать основные файлы и файлы voxco и заставить их работать с пакетным файлом?
person xpda    schedule 28.09.2013
comment
Очень хорошие предложения. Я не могу попробовать или ответить ни на один из них до понедельника, кроме 2, основные файлы не требуют номеров. Спасибо! - person user2824979; 29.09.2013
comment
Шестнадцатеричный редактор показывает, что файлы абсолютно одинаковы между файлом, созданным с помощью моей программы, и файлом, скопированным из более старого файла (последний работает в пакетном файле). Возврат каретки и перевод строки в моей программе верны. - person user2824979; 30.09.2013
comment
На самом деле шестнадцатеричный редактор работал - был раздел, который не появляется в реальном файле, если вы открываете его в блокноте, над фактическим текстом, и код для этого немного отличается между двумя файлами (созданные вручную и автоматически созданные файлы ). Когда я копирую из одного в другое, пакетный файл будет правильно запускать основную программу. Я пока не могу правильно отредактировать файл лота. Итак, как мне заставить мою программу правильно создавать файл? - person user2824979; 30.09.2013
comment
Этот дополнительный раздел в начале файла, вероятно, идентифицирует тип кодировки текста или метки порядка байтов. Определение правильно - это то, что ожидается в файле лота. Если вы хотите вывести именно то, что находится в строке LotText, вы можете преобразовать строку lotText в массив байтов и использовать System.IO.File.WriteAllBytes(filename, b), где b — массив байтов. - person xpda; 30.09.2013