Форум: "Основная";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
ВнизРабота с нетипизированными файлами Найти похожие ветки
← →
Vin_Ghost (2003-04-16 20:38) [0]Скажите пожалуйста, как в Delphi открыть нетипизированный файл и поменять все символы в нем от первого до последнего на свои (или оператором Xor)?
Чтобы было понятней, прилагаю аналог этой процедуры на VB:
Public Sub CodeDeCode(Fname$)
Dim CharNum%, i%
Dim SingleChar As String * 1
FileNum = FreeFile
Open Fname For Binary As #FileNum
For i = 1 To LOF(FileNum)
Get #FileNum, i, SingleChar
CharNum = Asc(SingleChar)
CharNum = CharNum Xor 241
SingleChar = Chr(CharNum)
Put #FileNum, i, SingleChar
Next i
Close #FileNum
End Sub
Если не трудно, то пришлите ответ на мой e-mail: Vin_Ghost@mail.ru
← →
Babay (2003-04-17 07:57) [1]Я так понимаю что работа идет с текстовым файлом...
Var sl:TStringList;
i:Integer;
begin
Sl:=TStringList.create;
sl.LoadFromFile("имя файла ");
for i:=1 to Lendth(Sl.text) do begin
SL.Text[i]:= chr(ord(Sl.Text[i]) Xor 241);
end;
sl.savetofile("имя файла");
end;
этот код не проверял писал так навскидку так что возможно есть ошибки.
если не текстовик то гдето так
открыть файл
считать в память
закрыть файл
заменить в памяти все байты как надо
записать из памяти на диск
или через файловый поток сработать
если нужен код напиши попробую сделать по свободе времени....
← →
Babay (2003-04-17 07:59) [2]Да
................
sl.savetofile("имя файла");
sl.free; // добавь
end;
← →
Anatoly Podgoretsky (2003-04-17 08:45) [3]Babay © (17.04.03 07:57)
Ты не правильно понимаешь, раз речь идет о XOR то ни о какйо работе с текстовым файлом и речи быть не может, просто не будет работать. Именно работа с двоичгым файлом.
← →
Babay (2003-04-17 08:57) [4]To Anatoly
Человек спрашивал про замену символов (см. вопрос)
кстати а что мешает это сделать с текстовиком?
насчет двоичнорго я то же упомянул
;=)#
← →
Anatoly Podgoretsky (2003-04-17 09:05) [5]И ты дал абсолютно верный по сути вопрос.
А мешают управляющие симводы в диапазоне от #0 до #31, которые получаются при использовании операции XOR, в первую очередь #0 и #26.
Поэтому надо использовать, что нибудь из следующего ряда: нетипизированный файлы, file of byte, TFileStream или WinApi функции работы с файлами.
Удобен TFileStream
← →
MBo (2003-04-17 09:07) [6]> а что мешает это сделать с текстовиком?
после xor могут появится недопустимые в txt символы
← →
Anatoly Podgoretsky (2003-04-17 09:15) [7]Результатом этого совета, при повторном запуске будет потеря файла!!!
← →
Babay (2003-04-17 09:25) [8]Уважаемые давайте не утрировать
Файл не потеряется а просто перестанет восприниматься как текстовик. (Хотя конечно мысль возникает что при двух символах 0 он не запишется до конца)
Согласен с вами вобщемто... Сам проходил.
Просто весь вопрос в том а что там в файле лежит.
Ну и конечно для ксора надо не как текстовик обрабатывать.
Но вопрос был про замену СИМВОЛОВ (возможно я слишком близко к сердцу воспринимаю это слово)
← →
Palladin (2003-04-17 09:30) [9]
> Просто весь вопрос в том а что там в файле лежит.
любой файл есть бинарный
← →
Anatoly Podgoretsky (2003-04-17 09:33) [10]Babay © (17.04.03 09:25)
Не упрсствуй, файл мменно потеряется, точнее снанет значительно короче. Что и означает его потерю, поскольку станет непригодным.
← →
Babay (2003-04-17 09:38) [11]согласен Anatoly !!!
КОД приведенный мною для текстовика считать НЕДЕЙСТВИТЕЛЬНЫМ или моим личным глюком.. :=))#
Извиняюсь за ложный путь...
← →
Slym (2003-04-17 10:05) [12]1. Не надо левых файлов...
2. Не надо много памяти...
Делай так:
//Это всевдокод - доделай сам.
hMap:=CreateFileMapping(...);//замапь файл
pChars:=Map...;//Выдели ему память
//если файл большой - мапь файл по чуть-чуть (32кб хватит)
//и работай как с памятью!!!
pChars[i]:=xor(pChars[i]);
UnMap;
← →
Verg (2003-04-17 10:20) [13]На скору руку - так:
var F : file;
Buff : array[0..2047] of byte;
Rdd : integer;
I : integer;
begin
system.assign(F, <filename>);
Reset(F, 1);
try
while not Eof(F) do
begin
BlockRead(F, Buff, sizeof(Buff), Rdd);
if Rdd>0 then
begin
for I:=0 to Rdd-1 do Buff[I]:=Buff[I] xor 241;
Seek(F, FilePos(F)-Rdd);
BlockWrite(F, Buff, Rdd);
end else break;
end;
finally
system.close(F);
end;
end;
← →
REA (2003-04-17 10:33) [14]Если в текстовом файле попадаются недопустимые символы (какие уже не помню), то TStringList.LoadFromFile читает файл только до этого места. Очень неприятно.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c