Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Xor части файла [D3, XP]


Страницы:   1 2 3

KLAUS_ ©   (2007-08-05 20:15:00) 

Всем привет!
Возникла проблемка на могу заксорить нужную часть файла, делаю так:

fs := TFileStream.Create(path+srec.name,fmOpenReadWrite);
 fs.Seek($00000000,soFromBeginning);
 str:=inttostr(fs.Read(b,sizeof(b)));
  for i:=1 to length(str) do
   str[i]:=Chr(Ord(str[i]) xor 1);
       fs.Seek($000000000,soFromBeginning);
    fs.Write(str,sizeof(str));
    fs.Free;

Файл считывается и даже значения меняются но как-то криво, и обратно не возвращается, подскажите где ошибка???  
b:=byte;


KLAUS_   (2007-08-05 21:39:00) [21]

{RASkov}Длина этих данных по этому адресу будет явно БАЙТ!!


MetalFan   (2007-08-05 21:38:00) [22]


> fs.write(Str[0], Length(Str));

ай опять за старую песню? Str[1], и если уж на то пошло, то лучше не использовать идентификатор Str!


{RASkov}   (2007-08-05 21:36:00) [23]

> [20] KLAUS_   (05.08.07 21:32)
> считываю данные в файле, пускай они будут по адресу $000000010

А длина этих данных какая??? откуда ты ее берешь?

И нафика столько всяких "переводов" туда-сюда??? Ты уже на этапе исходного кода пытаешься все "зашифровать"? :)


KLAUS_   (2007-08-05 21:35:00) [24]

Вот вот!!Согласен...
Что за AV??


Anatoly Podgoretsky   (2007-08-05 21:34:00) [25]

> {RASkov}  (05.08.2007 21:29:19)  [19]

Это даже не откомпилируется.


Anatoly Podgoretsky   (2007-08-05 21:33:00) [26]

> KLAUS_  (05.08.2007 21:23:18)  [18]

Про данные речь, тебе еще везет, а может наоборот, что AV не получаешь.


KLAUS_   (2007-08-05 21:32:00) [27]

{RASkov}
Не понял, считываю данные в файле, пускай они будут по адресу $000000010
, получаю (допустим) FF, перевожу в INT , получаю 255, перевожу в STR, теперь ксорю со смещением 1, получаю 344, перевожу в HEx, получаю 158 - вот я их  и хочу записать!!


{RASkov}   (2007-08-05 21:29:00) [28]

> [18] KLAUS_   (05.08.07 21:23)
> Но вот как

ЧТО Как???
Строки писать нужно, например, так:
fs.write(Str[0], Length(Str));
а не указатель на строку в виде 4 байт, как это делаешь ты....


KLAUS_   (2007-08-05 21:23:00) [29]

turbouserПолностью согласен!!
Но вот как, пока не могу понять, поэтому и обратился!!

Anatoly Podgoretsky
Что именно, данные которые записываю, или место в файле куда хочу записать??


{RASkov}   (2007-08-05 21:21:00) [30]

> [14] KLAUS_   (05.08.07 21:12)
> т.е. смысл ясен думаю

Нет :(
Откуда у тебя значение смещения? Или оно постоянное для файлов?

fs := TFileStream.Create(path+srec.name,fmOpenReadWrite);
for i:=1 to 5 do begin //Это и был вопрос про смещение, так как ты не ответал, то пусть будет 5 байт
 fs.Read(b,sizeof(b));
 b:=b xor 1;
 fs.Seek(fs.Position-1);
 fs.Write(b, SizeOf(b);
end;
fs.Free;


Так что ли? b: byte;


Anatoly Podgoretsky   (2007-08-05 21:19:00) [31]

Нужно обращение к буферу, а не использование переменной в качестве буфера. Можно через приведение к PChar


turbouser   (2007-08-05 21:13:00) [32]


> KLAUS_   (05.08.07 21:10) [12]

Эхх.
str:=inttostr(fs.Read(b,sizeof(b)));
Ты читаешь 1 байт (символ), при этом в str что оказывается? Правильно - кол-во
причитанных байт. Т.е. 1.

fs.Write(str,sizeof(str));
И что тут должно записАться в файл? Правильно - 4 байта непонятно чего.
Все-таки последуй совету из [7]


{RASkov}   (2007-08-05 21:12:00) [33]

> [12] KLAUS_   (05.08.07 21:10)

Ответь на [11]


KLAUS_   (2007-08-05 21:12:00) [34]

fs.Seek($000000000,soFromBeginning);
могу указать так <codefs.Seek($000000010,soFromBeginning);
т.е. смысл ясен думаю


KLAUS_   (2007-08-05 21:10:00) [35]

{RASkov}Да байты байты, опечатался!
Хм, кажись и так уж всё расписал:
Нужно в нужном месте считать быйты и сксорить их.......
Покажите где я ошибся или подскажите что изменить, но только давайте не будем ПОЧИТАЙ  и т.п.
Давайте подскажем где и как!!


{RASkov}   (2007-08-05 21:08:00) [36]

> [8] KLAUS_   (05.08.07 21:01)
> Хм, планировалось так, от начала файла до нужного места:

А как "нужное место" определяешь?


{RASkov}   (2007-08-05 21:06:00) [37]

> [8] KLAUS_   (05.08.07 21:01)

Вообще ничего не понял :(

> str:=inttostr(fs.Read(b,sizeof(b))); - как мне казалось считываю файлы

???? Может байты?

> Косячу да??

Походу...:)

[7] - почитай.

> [9] KLAUS_   (05.08.07 21:04)

Еще раз [7] почитай внимательно ) Или разъясняйся толковей...


KLAUS_   (2007-08-05 21:04:00) [38]

turbouser
Да как бы работал раньше, но дело не в этом ты по поводы вопросы говори, если есть что!


KLAUS_   (2007-08-05 21:01:00) [39]

Хм, планировалось так, от начала файла до нужного места:
str:=inttostr(fs.Read(b,sizeof(b))); - как мне казалось считываю файлы, а затем их ксорю!!
Косячу да??


turbouser   (2007-08-05 21:00:00) [40]


> KLAUS_   (05.08.07 20:51) [4]

Посмотрел бы ты в хелпе - что такое sizeof и пример использования TFileStream


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо