![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() имеется массив Q:array of string; в ходе работы программы он заполняется.Затем сохраняю массив Q в файл-стрим FileStream.Write(Q,SizeOf(Q)), но при попытке чтения из файла(FileStream.Read(Q,Sizeof(Q));
он не читается из файла...Помогите кто может советом ![]() |
#2
|
||||
|
||||
![]() Вот так думаю нормально запишет.
Код:
procedure TForm1.Button1Click(Sender: TObject); Var Q: Array of String[32]; F: TFileStream; i, R: Integer; begin R:= 2; SetLength(Q, R); Q[0]:= '0000'; Q[1]:= '1111'; F:= TFileStream.Create('C:\1.txt',fmCreate); For i:= 0 To R - 1 Do F.Write(Q[i], SizeOf(Q[i])); F.Free; end; If end Then begin; |
#3
|
|||
|
|||
![]() Ага, а как ты читать-то будешь.
Да и не уверен, что оно так запишется. Надо писать в таком порядке: 1. Пришем кол-во элементов массива (Length). 2. Циклом по элементам: 2.1. Пишем длинну строки очередного элемента 2.2. Пишем саму строку. Чтение, соответсвенно, происходит аналогично. А вообще, если твои строки не содержат переводов строк, то лучше использовать TStringList. С ним работать гораздо удобнее. |
#4
|
||||
|
||||
![]() Попробовал записует и читает норм. Да только количество елементов массива нужно тоже сохранять. Хотя согласен с вышесказанным что
лучше использовать TStringList. Код:
procedure TForm1.Button2Click(Sender: TObject); Var Q: Array of String[32]; F: TFileStream; i, R: Integer; begin R:= 2; SetLength(Q, R); F:= TFileStream.Create('C:\1.txt',fmOpenRead); For i:= 0 To R - 1 Do begin F.Read(Q[i], SizeOf(Q[i])); ListBox1.Items.Add(Q[i]); end; F.Free; end; If end Then begin; |
#5
|
|||
|
|||
![]() Цитата:
|
#6
|
||||
|
||||
![]() Не знаю, у меня вышеприведенный код работает в разных программах,
(но не одновременно). Так пробовали? Код:
Var SL: TStringList; // Запись begin SL:= TStringList.Create; SL.Add('567fgytfyfuyup8y76'); SL.Add('df6f6fy6u'); SL.SaveToFile('C:\2.txt'); SL.Free; end; // Чтение begin SL:= TStringList.Create; SL.LoadFromFile('C:\2.txt'); N:= SL.Count; // к-во елементов S:= SL.Strings[i]; SL.Free; end; If end Then begin; |
#7
|
|||
|
|||
![]() а если будет массив не строк,а значений типа byte как считывать из динамического массива в файл-стрим,а затем прочитать в другой программе из файла этот массив?
![]() |
#8
|
|||
|
|||
![]() так-же, как я тебе сказал. Только тогда не надо отдельно писать длинну каждого элемента, т.к. данный тип имеет фикстрованный размер.
Код:
var A : Array Of Byte F : TFileStream; I : Integer; begin SetLength(A,10); ... // Запись F := TFileStream.Create(...); I := Length(A); F.WriteBuffer(I,SizeOf(Integer)); For I := Low(A) To High(A) Do F.WriteBuffer(A[i],SizeOf(Byte)); F.Free; // Чтение F := TFileStream.Create(...); F.ReadBuffer(I,SizeOf(Integer)); SetLength(A,I); For I := Low(A) To High(A) Do F.ReadBuffer(A[i],SizeOf(Byte)); F.Free; end; |
#9
|
|||
|
|||
![]() Большое спасибо всем за проявление активности в решении проблемки
![]() |