Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1103867857
LaidBack
2004-12-24 08:57
2005.01.16
Нужен хитрый вариантный тип


1-1104637374
antonn
2005-01-02 06:42
2005.01.16
Меню и подменю


14-1104238026
Vadim X
2004-12-28 15:47
2005.01.16
Где бы взять mfc42.lib ?


14-1104244124
Cerberus
2004-12-28 17:28
2005.01.16
Игры для сотовых.


1-1104658480
E_
2005-01-02 12:34
2005.01.16
Query





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский