2015-08-26 2 views
1

У меня есть приложение VB6, которое записывается в файл в режиме произвольного доступа. Затем этот файл считывается приложением, разработанным третьей стороной.VB6 to VB.NET написать в файл произвольного доступа

Мне было поручено переписать приложение VB6 в VB.NET, однако стороннее приложение не изменится. Я попытался преобразовать код VB6 в VB.NET, однако файл произвольного доступа не читается правильно.

Ниже приведены сжатые фрагменты кода VB6 и VB.NET. Код VB.NET успешно записывается в файл, однако длина поля неверна, и приложение, просматривающее файл, не корректно анализирует данные. Как я могу писать в файл случайного доступа таким же образом?

Я искал вокруг, но не нашел решение, которое работает.

VB6

Type Person 
    ID as String * 5 
    Name as String * 25 
    EyeColor as String * 10 
End Type 

Dim myPerson as Person 
myPerson.ID = "13" 
myPerson.Name = "Joe" 
myPerson.EyeColor = "Blue" 

Open <file path> For Random As <file number> Len = Len(myPerson) 
    Put <file number>, myPerson.ID, myPerson 
Close <file number> 

VB.NET

Structure Person 
    <VBFixedString(5)> Dim ID As String 
    <VBFixedString(25)> Dim Name As String 
    <VBFixedString(10)> Dim EyeColor As String 
End Structure 

Dim myPerson as New Person 
myPerson.ID = "13" 
myPerson.Name = "Joe" 
myPerson.EyeColor = "Blue" 

FileOpen(<file number>, <file path>, OpenMode.Random, , , Len(myPerson)) 
    FilePut(<file number>, myPerson, myPerson.ID) 
FileClose(<file number>) 
+0

ли вы просмотреть файл с шестнадцатеричным редактором? Может быть, что-то с Ansi vs Unicode? –

+0

Вы должны посмотреть на [System.IO] (https://msdn.microsoft.com/en-us/library/system.io (v = vs.110) .aspx) класс, который содержит функции VB.NET для пишите файлы вместо старого метода VB6. Вы не очень конкретны в том, что не работает, это трудно помочь. Вот догадка: вы можете использовать метод [PadRight] (https://msdn.microsoft.com/en-us/library/system.string.padright (v = vs.110) .aspx), чтобы добавить дополнительное пространство. –

+0

Создаются файлы произвольного доступа, и если я пишу и читаю их/используя их .net, все работает так, как должно. Основываясь на моих исследованиях до сих пор, это, по-видимому, проблема с длинами полей на уровне байтов. Длины фиксированного поля VB6 не совпадают с VB.NET-коллегой – DonJoe

ответ

0

Не уверен, если это решает проблемы с кодировкой ....

я жёстко закодировал FilePut RecordNumber в тесте ,

Structure Person 
    <VBFixedString(5)> Dim ID As String 
    <VBFixedString(25)> Dim Name As String 
    <VBFixedString(10)> Dim EyeColor As String 
End Structure 

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    Dim myPerson As New Person 
    myPerson.ID = "13".PadLeft(5) 
    myPerson.Name = "Joe".PadLeft(15) 
    myPerson.EyeColor = "Blue".PadLeft(10) 
    Stop 

    FileOpen(1, "C:\temp\random.bin", OpenMode.Random, , , Len(myPerson)) 
    FilePut(1, myPerson, 2) ' needs integer RecordNumber - depreciated? 
    FileClose(1) 
End Sub 

Visual Studio имеет шестнадцатеричный редактор - Я думаю, что это вариант в разделе Файл, Открыть

Смежные вопросы