Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизДва вопроса по работе с файлами Найти похожие ветки
← →
LedWorm (2004-12-24 20:50) [0]Возникло два вопроса
1) Как дописать две строчки в файл (в самое начало, не в конец).
2) Как можно удалить эти две строчки.
заранее благодарен.
← →
begin...end © (2004-12-24 20:59) [1]> LedWorm (24.12.04 20:50)
Для небольших текстовых файлов подойдёт TStringList.
← →
Alex_Bredin © (2004-12-24 21:10) [2]
> begin...end © (24.12.04 20:59) [1]
и для больших тоже (проверено до 100М)
← →
VMcL © (2004-12-24 21:13) [3]>>Alex_Bredin © (24.12.04 21:10) [2]
Смотря какой объём RAM.
← →
LedWorm (2004-12-25 10:30) [4]Дело в том, что файл уже создан (он сгенерирован какой-то программой).
Там все записано в одну строчку, причем очень много всяких знаков форматирования.
readln"ом ее прочитать не удается, читает только до первого EOF"а, а их там несколько.
Я конечно попробую со StringList покопаться, но может есть еще предложения?
← →
Anatoly Podgoretsky © (2004-12-25 11:51) [5]Как можно удалить две первые строчке если файл состоит из одной строчки.
← →
_Lucky_ (2004-12-25 13:18) [6]Интересный факт
> читает только до первого EOF"а
это вообще как? я думал это и есть признак конца файла, а как же быть если их несколько? (наверное я чего-то не понимаю)
> Там все записано в одну строчку, причем очень много всяких
> знаков форматирования.
что в вашем понимании записано в одну строку? и какие это знаки форматирования? (перевод каретки, табуляция, ..., ?) можно было бы привести примеры, а лучше собственно файл, имея исходные данные гораздо легче решить поставленную задачу.
← →
cadaber (2004-12-25 14:11) [7]TFileStream
← →
LedWorm (2004-12-25 17:34) [8]TPF0TTeThemeSTreeView TreeView1LeftTop╗Width╧Height!ColorККН
HideSelectionImagesfrmMain.ImageList1Indent PopupMenufrmMain.TeThemePopupMenu1ReadOnly RightClickSelect ShowButtons ShowLinesTabOrderVisible
Items.Data
ф"ЪЪЪЪDDI8vLXsE12dPBЪЪЪЪЪЪЪЪu3PIOBЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪЪThemeEnginefrmMain.NgThemeEngine1
Это и есть собственно пример файла.
← →
LedWorm (2004-12-25 17:40) [9]Этот файл создан при помощи следующей процедуры.
procedure TForm1.Button1Click(Sender: TObject);
var
F: TFileStream;
begin
F := TFileStream.Create("c:\TreeView.txt", fmCreate or fmShareCompat);
try
F.WriteComponent(TreeView1);
finally
F.Free;
end;
end;
← →
Andrick © (2004-12-25 17:44) [10]
> это вообще как? я думал это и есть признак конца файла,
> а как же быть если их несколько? (наверное я чего-то не
> понимаю)
Плиз просмотреть хекс любого архива, например, винрара - там этих кодов столько, сколько файлов в архиве
А, собственно, перед чем надо вставить строки? Где конец (или начало) того местечка, перед чем надо вставляться?
← →
LedWorm (2004-12-25 20:46) [11]две строчки нужно ставить в самое начало.
Т.е. перед TPF...
← →
Leonid Troyanovsky © (2004-12-25 21:21) [12]
> LedWorm (25.12.04 20:46) [11]
> две строчки нужно ставить в самое начало.
> Т.е. перед TPF...
"Где начало того конца, чем оканчивается начало?" [К.Прутков]
А вот и не надо вставлять в такой файл _строки_.
Да и, возможно, если внимательно разобраться,
может и вообще ничего не надо вставлять.
--
С уважением, LVT.
← →
begin...end © (2004-12-25 21:48) [13]> [11] LedWorm (25.12.04 20:46)
Файл, пример которого Вы привели - это НЕ текстовый файл. Это ПРОСТО файл. В него нельзя встравить строку, или удалить её оттуда. Потому что никаких строк там НЕТ. Можно вставить туда какой-то блок информации, в том числе и массив символов, но это не будет строкой в обычном понимании (как для текстовых файлов). Если уж надо с этим файлом работать, - работайте с ним как с НЕтипизированным, т.е. как с ПРОСТО файлом - набором байтов, записанным на диск.
Вот пример, как можно вставить, например, 10 байт в начало такого файла:var
MyFile: file; // Переменная файла
Size: Integer; // Размер исходного файла
pOldInfo: Pointer; // Указатель на буфер
InfoToAdd: array [1..10] of Byte; // Массив, который будем добавлять
begin
// Связываем файловую переменную с маршрутом доступа
AssignFile(MyFile, "c:\TreeView.txt");
// Открываем файл для чтения
Reset(MyFile, 1);
// Определяем размер файла
Size := FileSize(MyFile);
// Выделяем память для хранения информации, которую мы хотим
// прочитать, т.е. той информации, которая уже есть в файле
GetMem(pOldInfo, Size);
// Читаем файл полностью
BlockRead(MyFile, pOldInfo^, Size);
// Закрываем файл
CloseFile(MyFile);
// Открываем тот же самый файл для записи
Rewrite(MyFile, 1);
// Файл очистился, он сейчас пуст
// Записываем туда 10 байт - массив InfoToAdd
BlockWrite(MyFile, InfoToAdd, Length(InfoToAdd));
// Теперь записываем ту информацию, которая была в исходном файле
BlockWrite(MyFile, pOldInfo^, Size);
// Закрываем файл
CloseFile(MyFile);
// Освобождаем память
FreeMem(pOldInfo)
end.
Теперь можно просмотреть этот файл, например, в FAR"е (но не в текстовом редакторе), и убедиться, что в начало его записались 10 байт - именно те 10 байт, которые и представлял из себя массив InfoToAdd.
Разумеется, можно было сделать то же самое и с помощью файловых потоков (TFileStream).
Но нужно ли это всё делать? Зачем Вам это "дописывание" нужно?
← →
LedWorm (2004-12-25 22:51) [14]Спасибо всем, постараюсь разобраться.
А дописывание было нужно, чтобы записать в первую строку пароль, а потом этим паролем зашифровать все остальное (пароль тоже шифруется, но заранее известным алгоритмом).
← →
Leonid Troyanovsky © (2004-12-25 22:58) [15]
> LedWorm (25.12.04 22:51) [14]
> А дописывание было нужно, чтобы записать в первую строку
> пароль, а потом этим паролем зашифровать все остальное (пароль
> тоже шифруется, но заранее известным алгоритмом).
Действительно, очень удобно.
Уж, во всяком случае, пароль не потеряется.
--
С уважением, LVT.
← →
Просто Джо © (2004-12-26 03:50) [16]А чтоб не грузили TreeView из моего файла... Ишь повадились! Мой файл, мой, зашифрованный. И пароль тоже мой. Не трожь.
Маленькая импровизация.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.033 c