У меня есть приложение 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>)
ли вы просмотреть файл с шестнадцатеричным редактором? Может быть, что-то с Ansi vs Unicode? –
Вы должны посмотреть на [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), чтобы добавить дополнительное пространство. –
Создаются файлы произвольного доступа, и если я пишу и читаю их/используя их .net, все работает так, как должно. Основываясь на моих исследованиях до сих пор, это, по-видимому, проблема с длинами полей на уровне байтов. Длины фиксированного поля VB6 не совпадают с VB.NET-коллегой – DonJoe