Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-91468
Карлсон
2003-04-09 19:12
2003.04.28
сколько всего сервиспаков для win2k?


3-91139
Olivka
2003-04-07 20:34
2003.04.28
оптимизация запроса


1-91263
Незнайка
2003-04-17 02:04
2003.04.28
Принцип прорисовки компанента во время выполнения


3-91178
AleksandrKu
2003-04-09 14:36
2003.04.28
Помогите со StoredProc


6-91429
ole
2003-03-04 05:06
2003.04.28
Проблема: Поток обрабатывающий одно подключение в TServerSocket





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