![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |
|
#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; |
|
#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; |
|
#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
|
|||
|
|||
|
Большое спасибо всем за проявление активности в решении проблемки
![]() |