Delphi Опубликовано 5 января, 2007 Жалоба Поделиться Опубликовано 5 января, 2007 Здраствуйте у меня возникла такая проблемка решил написать прогу для шифрования даних всё работает нормально текст кодируеться но вот при шифровании таких документов типа ворд,гиф,и других в которых есть нечитаемые символы при разшифрование неработает. В моем алгоритме я работаю с кодами символов и они по идеи должны нормально работать текст исходный и тот что получился после разкодирования одинаковые, почему тогда получаеться что эти файлы неработаю изображение просто неотображаеться, звуковые и видео файлы не проигрываються..., даже ворд и тот ругаеться. Подскажите в чём может быть проблема Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 5 января, 2007 Жалоба Поделиться Опубликовано 5 января, 2007 (изменено) Потому что документы Word, аудио- и видеофайлы - это бинарные файлы, а не текстовые, и работать с ними как с набором символов - нельзя. Работай с потоками байтов, и все будет хорошо. Изменено 5 января, 2007 пользователем Shurr Ссылка на комментарий Поделиться на другие сайты Поделиться
yuriks Опубликовано 5 января, 2007 Жалоба Поделиться Опубликовано 5 января, 2007 Код давай. Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 5 января, 2007 Жалоба Поделиться Опубликовано 5 января, 2007 Shurr: поправлю Потому что документы Word, аудио- и видеофайлы - это не бинарные файлы, а не текстовые, ;) Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 5 января, 2007 Автор Жалоба Поделиться Опубликовано 5 января, 2007 (изменено) Как я понял прогу доходит до символ конец документа и прекращяет считывание, если не секрет кто знает какой код у этого символа. Код чего дать всей проги? или именно считывания? Shurr с потоком это в смысле через потоки данных? Изменено 5 января, 2007 пользователем Delphi Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 6 января, 2007 Жалоба Поделиться Опубликовано 6 января, 2007 Delphi: код конца строки 0Ah 0Dh или же просто ноль. Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 6 января, 2007 Жалоба Поделиться Опубликовано 6 января, 2007 Delphi У тебя будут проблемы с при попытке работать с бинарным файлов как с текстовым. Код конца строки может состоять из двух символов, как сказал Indomito: 0Ah 0Dh, может состоять из одного: 0Ah, а может быть еще каким-нибудь. Ты можешь попытаться рассмотреть их как отдельные случаи, но это заплатка а не нормальный выход из положения. Нормальный выход - работать с байтами а не с символами. Shurr с потоком это в смысле через потоки данных? Ключевое слово не потоки, а байты. Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 6 января, 2007 Жалоба Поделиться Опубликовано 6 января, 2007 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 байта - это для обработки больших файлов. Ну, а дальше природа мать подскажет :) ...или Н. Вирт Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 6 января, 2007 Автор Жалоба Поделиться Опубликовано 6 января, 2007 У меня просто получаеться так что прога при кодировании может выдать файлы с кодом меньше 32 и не равный 0 и поэтому получаеться что символ 1A может встретиться в середине файла или мне получаеться этот символ лутче тогда некодировать? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти