Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Вниз

Как вставить байты в файл и как их оттуда удалить???   Найти похожие ветки 

 
Sirus   (2004-12-08 13:28) [0]

Привет Мастера...
Есть вопрос: Подскажите быстрый способ вставки в файл определнного количества байт и как их оттуда удалить?


 
Рамиль ©   (2004-12-08 13:34) [1]

1 Загрузить в память с нужной позиции и записать обратно (если не большой).
2 переписать в другой файл и заменить


 
Smithson   (2004-12-08 13:35) [2]

Что за файл?
Если файл поддердивает внутреннюю навигацию, то разговор один.
Если нет - "просто данные", то разговор другой и более печальный, поскольку способ один единственный - читаете файл до нужного места,  вставляете/удаляете нужные байты, дочитываете файл до конца и записываете его обратно на диск. Где вы будете держать временные данные зависит от разных причин - можно в памяти, можно во временном файле. В памяти быстрее, во временном файле нет ограничения на размер обрабатываеого файла.


 
Poirot ©   (2004-12-08 13:43) [3]

>>  во временном файле нет ограничения на размер обрабатываеого файла.
Ну это вы сильно сказали:) тту тогда можно опять много "если" наложить :)

по теме:
Вариат естственно один... Только лучче уж тогда скажи что ты хочешь конкретно.. т.е. проблему опиши:)


 
Sirus   (2004-12-08 13:45) [4]

Мне создание временных файлов как-то влом идет, файл довольно таки здоровый. Файл обычный текстовый, вот там надо пару слов заменить на другую пару слов...


 
TUser ©   (2004-12-08 13:48) [5]


> вот там надо пару слов заменить на другую пару слов

Повезло, если длина у них одинаковая. См. TFileStream


 
Sirus   (2004-12-08 13:51) [6]

В том-то  дело что-длина у них не одинаковая.


 
Poirot ©   (2004-12-08 14:03) [7]

Тогда тока тмп:)


 
palva ©   (2004-12-08 15:40) [8]

А если сделать резерв в виде пробелов в конце данной строки?


 
Sun bittern ©   (2004-12-08 16:50) [9]

>> Файл обычный текстовый, вот там надо пару слов заменить на другую пару слов...

TStringList.LoadFromFile(...);
AnsiReplaceTetx(TStringList.Tetx...);
TStringList.SaveToFile(...);


 
Fay ©   (2004-12-09 04:02) [10]

Я тут накидал фигулину. Заменяет на заданную строку блок некоторой длины по в некоторой позиции. Без временых файлов. Знаю что придраться есть к чему 8)

procedure Repl(const FileName, NewStr : string; dwPos, dwLen : DWORD);
const
 MIN_BSZ = 4096;
var
 br, bw : PChar;
 bsz, hr, hw, nr, nw, n : DWORD;
label
 Labels_Rulezz;
begin
 hw := CreateFile(PChar(FileName), GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
 if hw = INVALID_HANDLE_VALUE then RaiseLastOsError;
 hr := INVALID_HANDLE_VALUE;
 br := nil;
 bw := nil;
 try
   hr := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
   if hr = INVALID_HANDLE_VALUE then RaiseLastOsError;
   SetFilePointer(hw, dwPos, nil, FILE_BEGIN);
   SetFilePointer(hr, dwPos + dwLen, nil, FILE_BEGIN);
   n := Length(NewStr);
   bsz := MIN_BSZ;
   while (bsz + dwLen) < n do
     bsz := bsz shl 1;
   GetMem(br, bsz);
   GetMem(bw, bsz);
   Move(PChar(NewStr)^, br^, n);
   goto Labels_Rulezz;
   repeat
     WriteFile(hw, bw^, n, nw, nil);
     n := nr;
     Labels_Rulezz :
     Move(br^, bw^, n);
     ReadFile(hr, br^, bsz, nr, nil);
   until n = 0;
   SetEndOfFile(hw);
 finally
   if hr <> INVALID_HANDLE_VALUE then CloseHandle(hr);
   CloseHandle(hw);
   if br <> nil then FreeMem(br);
   if bw <> nil then FreeMem(bw);
 end;
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.062 c
1-1103073956
Builder
2004-12-15 04:25
2004.12.26
Убить себя


1-1102669514
ASoft
2004-12-10 12:05
2004.12.26
Folder.


3-1101587768
Fedor
2004-11-27 23:36
2004.12.26
Сортировка IBTable


1-1102470358
Viktop
2004-12-08 04:45
2004.12.26
Сохранение настроек Delphi


1-1102417746
COOLer
2004-12-07 14:09
2004.12.26
подсветка букв в RichEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский