Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

Два вопроса по работе с файлами   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.049 c
14-1103872673
Чеширский_Кот
2004-12-24 10:17
2005.01.16
Good day


3-1103097786
Arkady
2004-12-15 11:03
2005.01.16
Базы CDS


3-1103174137
_sulent
2004-12-16 08:15
2005.01.16
Пользователи


3-1102700928
Kot
2004-12-10 20:48
2005.01.16
Создание БД в InterBase


6-1095247733
integral9
2004-09-15 15:28
2005.01.16
post из delphi