Страница: 1 |
' Открытие файла Dim fs As FileStream Dim sr As StreamReader cdlFileOpen.Filter = "Текстовые (*.txt)|*.txt|Все файлы (*.*)|*.*" If cdlFileOpen.ShowDialog() = DialogResult.OK Then txtText.Clear() fs = cdlFileOpen.OpenFile If Not (fs Is Nothing) Then 'sr = New StreamReader(fs, System.Text.Encoding.GetEncoding(1251)) 'sr = New StreamReader(fs, System.Text.Encoding.GetEncoding(10007)) ' MacCP sr = New StreamReader(fs, System.Text.Encoding.GetEncoding(20866)) ' Koi8-r CP 'sr = New StreamReader(fs, System.Text.Encoding.GetEncoding(866)) txtText.Text = sr.ReadToEnd sr.Close() fs.Close() End If End If Вот пример кода из моей проги Конкретней нужно формулировать ..... Если а правильно понял, то посмотри пример: Dim FS As FileStream FS = New FileStream("BinaryData.bin", _ System.IO.FileMode.OpenOrCreate, _ System.IO.FileAccess.Write) BW = New BinaryWriter(FS) BW.BaseStream.Seek(0, SeekOrigin.Begin) Dim p As New Product() p.ProdID = "100-A39" p.prodDescription = "Cellular Phone with built-in TV" p.listPrice = 497.99 p.available = True p.minStock = 40 SaveRecord(BW, p) p = p.ProdID = "100-U300" p.prodDescription = "Wireless Handheld" p.listPrice = 315.5 p.Available = p.minStock = 12 SaveRecord(BW, p) p = p.ProdID = "99-BBB" p.prodDescription = "Calculator/Recorder Watch" p.listPrice = 49.99 p.available = p.minStock = 10 SaveRecord(BW, p) BW.Close() FS.Close() FS = MsgBox("Records saved") Button2.Enabled = writer.Write(record.ProdID) writer.Write(record.prodDescription) writer.Write(record.listPrice) writer.Write(record.Available) writer.Write(record.minStock) Dim BR As BinaryReader Dim FS As FileStream FS = New System.IO.FileStream("Binarydata.bin", _ FileMode.Open, _ FileAccess.Read) BR = New System.IO.BinaryReader(FS) BR.BaseStream.Seek(0, SeekOrigin.Begin) Dim p As New Product() TextBox1.Clear() Dim c As Integer c = BR.PeekChar Console.WriteLine(c) p = p.ProdID = BR.ReadString p.prodDescription = BR.ReadString p.listPrice = BR.ReadSingle p.Available = BR.ReadBoolean p.minStock = BR.ReadInt32 BR.Close() FS.Close() Кажется примерно так, но вообщето я сам для этих целей использую XML схемы, пишу сериализацию, разные там конвертеры ....и т.д. Отправил симпл на мыло ..... Страница: 1 |
Вопрос: VB .NET - чтение структуры из файла
Добавлено: 22.05.03 17:28
Автор вопроса: Павел | Web-сайт:
VB .NET. Как прочитать инфу из файла в структуру? Конечно, можно это сделать, юзая операторы Open/Get/Close. Но хотелось бы как-нибудь цивилизованно, через Stream'ы.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
Chill
ICQ: 554200
Вопросов: 101
Ответов: 343
Профиль | | #1
Добавлено: 23.05.03 00:55
Номер ответа: 2
Автор ответа:
Creator
Вопросов: 11
Ответов: 61
Профиль | | #2
Добавлено: 23.05.03 08:17
Structure Product
Dim ProdID As StringDim prodDescription As StringDim listPrice As SingleDim Available As BooleanDim minStock As IntegerEnd StructurePrivate Sub SaveToFile
Номер ответа: 3
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #3
Добавлено: 23.05.03 09:33
Спасибо, так и я умею (по отдельности читать в свойства структуры). А пордробнее про XML схемы, пишу сериализацию, разные там конвертеры можно?
Номер ответа: 4
Автор ответа:
Creator
Вопросов: 11
Ответов: 61
Профиль | | #4
Добавлено: 23.05.03 10:37
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 27.01.08 18:30
О! Наконец-то смайлы вернули!
Номер ответа: 6
Автор ответа:
ника
Вопросов: 1
Ответов: 111
Профиль | | #6
Добавлено: 27.01.08 20:25
Это реализуется достаточно просто через Marshal.PtrToStructure. Но надо помнить несколько правил использования структур:
1. Все поля структуры должны иметь фиксированный размер. Т.е если это int - 4 байта, byte -1 и т.д. Если же в структуре используете string , то это поле обязательно должно быть объявлено с аттрибутом SizeConst.
2. Сама структура должна иметь аттрибут [StructLayout(LayoutKind.Sequential)]
3. Суммарный размер структуры (полученный через Marshal.SizeOf) не должен превышать 16 байт. В противном случае применение структур становится неоправданным из за потери скорости работы с нею (Boxing / Unboxing)
Само собой, что файл должен иметь соотвествующую структуру.
P.S. пример писать не буду из за неимения VB и неадекватного отношения отдельных личностей вашего форума к C#
Номер ответа: 7
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #7
Добавлено: 28.01.08 02:29
Попробуй делать не структуру, а класс с атрибутом serializable и сериализуй его либо с помощью SOAP в XML, либо в бинарник с binaryformatter (2-й способ намного быстрее)
Номер ответа: 8
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #8
Добавлено: 28.01.08 02:43
а вот пару примеров с хештаблей(можешь ее использовать вместо структуры), для SOAP поменяй форматтер.
Dim fs As IO.Stream
Try
fs = New IO.FileStream(Application.StartupPath & "\init.dat", IO.FileMode.OpenOrCreate)
Dim bw As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
bw.Serialize(fs, ht)
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
Finally
fs.Close()
End Try
End Sub
Public Function get_percorsi_connesione() As Hashtable
Dim ht As Hashtable
Dim fs As IO.Stream
Try
fs = New IO.FileStream(Application.StartupPath & "\init.dat", IO.FileMode.OpenOrCreate)
Dim bw As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
ht = DirectCast(bw.Deserialize(fs), Hashtable)
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
Finally
fs.Close()
End Try
End Function
Номер ответа: 9
Автор ответа:
ника
Вопросов: 1
Ответов: 111
Профиль | | #9
Добавлено: 28.01.08 14:20
1. Утверждение имеет смысл только на больших объемах сохраняемых данных. Выигрыш в скорости может доходить до 50 раз. Но на маленьких объемах - это неактуально.
2. После малейшего изменения кода, файл с данными становится нечитаемым. Во избежании этого код приходится выносить в отдельную сборку - а это не всегда удобно.
3. Xml сериализация имхо является более предпочтительной, если позволяют объемы.
4. PtrToStructure это самый быстрый способ заполнения структуры на сегоднешний момент. Но структура, это как рыба фуго - надо уметь правильно приготовить. Иначе ничего, кроме тормозов, ты не получишь.