Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Файлы


Рекомендуемые сообщения

Здраствуйте у меня возникла такая проблемка решил написать прогу для шифрования даних всё работает нормально текст кодируеться но вот при шифровании таких документов типа ворд,гиф,и других в которых есть нечитаемые символы при разшифрование неработает. В моем алгоритме я работаю с кодами символов и они по идеи должны нормально работать текст исходный и тот что получился после разкодирования одинаковые, почему тогда получаеться что эти файлы неработаю изображение просто неотображаеться, звуковые и видео файлы не проигрываються..., даже ворд и тот ругаеться. Подскажите в чём может быть проблема

Ссылка на комментарий
Поделиться на другие сайты

Потому что документы Word, аудио- и видеофайлы - это бинарные файлы, а не текстовые, и работать с ними как с набором символов - нельзя. Работай с потоками байтов, и все будет хорошо.

Изменено пользователем Shurr
Ссылка на комментарий
Поделиться на другие сайты

Shurr: поправлю

Потому что документы Word, аудио- и видеофайлы - это не бинарные файлы, а не текстовые,
;)
Ссылка на комментарий
Поделиться на другие сайты

Как я понял прогу доходит до символ конец документа и прекращяет считывание, если не секрет кто знает какой код у этого символа. Код чего дать всей проги? или именно считывания?

Shurr с потоком это в смысле через потоки данных?

Изменено пользователем Delphi
Ссылка на комментарий
Поделиться на другие сайты

Delphi

У тебя будут проблемы с при попытке работать с бинарным файлов как с текстовым. Код конца строки может состоять из двух символов, как сказал Indomito: 0Ah 0Dh, может состоять из одного: 0Ah, а может быть еще каким-нибудь. Ты можешь попытаться рассмотреть их как отдельные случаи, но это заплатка а не нормальный выход из положения. Нормальный выход - работать с байтами а не с символами.

Shurr с потоком это в смысле через потоки данных?

Ключевое слово не потоки, а байты.

Ссылка на комментарий
Поделиться на другие сайты

Delphi:

Для начала разберемся, что такое текстовые файлы и в чем их различие от двоичных файлов. Текстовые файлы являются подмножеством двоичных файлов, но в отличии от двоичных не могут содержать весь набор символов. Вся информация в файле разбивается на строки, ограниченные символам возврат каретки (CR) и перевод строки (LF). Допустимые символы это символы с кодами от 32 до 255, символы с кодами ниже 32 являются управляющими и допустимы только следующие коды:

08 (BS) - возврат на шаг

09 (TAB) - табуляция

0A (LF) - перевод строки

0C (FF) – перевод листа

0D (CR) – возврат каретки

1A (EOF) – конец файла

Тебе же надо работать с абстрактными данными, с двоичными данными абстрактного типа или же просто набор байт.

var

SL: TStringList;

I: Integer;

FS: TFileStream;

FileName: string;

I: Integer;

begin

FS := TFileStream.Create(Filename, fmOpenWrite or fmShareExclusive);

try

for I := 0 to Sl.Count –1 do // проход по всем строкам

begin

FS.Write(Length(Sl.Strings), SizeOf(LongInt));

FS.Write(Sl.Strings, Length(Sl.Strings));

end;

finally

FS.Free;

end;

end.

желателно объявить так переменные не I: Integer, а I: LongInt тк LongInt всегда 4 байта - это для обработки больших файлов. Ну, а дальше природа мать подскажет :) ...или Н. Вирт :g:

Ссылка на комментарий
Поделиться на другие сайты

У меня просто получаеться так что прога при кодировании может выдать файлы с кодом меньше 32 и не равный 0 и поэтому получаеться что символ 1A может встретиться в середине файла или мне получаеться этот символ лутче тогда некодировать?

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...