Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2012, 20:13   #11
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от ManHunterGroms Посмотреть сообщение
СПАСИБО ВАМ ОГРОМНОЕ. Я понял свою ошибку!!! Вы меня спасли!
Автор хочу вас уберечь.. о том, fread читает до символа EOF поэтому его крайне не стоит использовать.. дабы избежать неприятностей....
я воспользовался функцией fgets для ANSI и fgetws для UNICODE в принципе ошибка у меня прошла. ибо fread возвращал, что он прочитал 0. он не как не мог прочесть закодированый "t." строчку.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 25.12.2012, 21:41   #12
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Открывайте файл в бинарном режиме...
waleri вне форума Ответить с цитированием
Старый 28.12.2012, 22:54   #13
ManHunterGroms
Пользователь
 
Регистрация: 15.12.2011
Сообщений: 11
По умолчанию

Возникла проблема и не знаю как исправить.
Я сделал проверку чтобы доходя до конца файла fread-ом, я считывал последние (size-total_read) байт, где size - это размер файла, а total_read кол-во считанных байт.
На форуме не удается выложить мой код, поэтому вот ссылка:
https://docs.google.com/folder/d/0B_...tqMVRONWs/edit
все операции по открытию файлов и их чтение/запись производится в ф-ции:
Код:
int operateFile(char *file, char *file2, char mode)
проверкой:
Код:
if(size > total_read)
я проверяю остались ли не прочитанные байты, если да то проверяю на чём мы остановились, на записи в high или low чтобы знать в какой блок записывать.
И читаем из файла недостающие (size - total_read) байт:
Код:
fread(&buffer, (size - total_read), 1, f);
НО ТУТ МОМЕНТ!!!
далее я записываю через fread 4 байта, а хотя считывал (size - total_read) байт, но как я не пробовал ничего не помогает.
В итоге шифрую файл input.txt файл расшифровывается хорошо кроме последних нескольких символов.
Что же может быть, я думаю, что я не правильно записываю последние байты, но уже перепробовал всё, ничего не помогло.
ManHunterGroms вне форума Ответить с цитированием
Старый 28.12.2012, 23:21   #14
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от ManHunterGroms Посмотреть сообщение
Возникла проблема и не знаю как исправить.
Я сделал проверку чтобы доходя до конца файла fread-ом, я считывал последние (size-total_read) байт, где size - это размер файла, а total_read кол-во считанных байт.
На форуме не удается выложить мой код, поэтому вот ссылка:
https://docs.google.com/folder/d/0B_...tqMVRONWs/edit
все операции по открытию файлов и их чтение/запись производится в ф-ции:
Код:
int operateFile(char *file, char *file2, char mode)
проверкой:
Код:
if(size > total_read)
я проверяю остались ли не прочитанные байты, если да то проверяю на чём мы остановились, на записи в high или low чтобы знать в какой блок записывать.
И читаем из файла недостающие (size - total_read) байт:
Код:
fread(&buffer, (size - total_read), 1, f);
НО ТУТ МОМЕНТ!!!
далее я записываю через fread 4 байта, а хотя считывал (size - total_read) байт, но как я не пробовал ничего не помогает.
В итоге шифрую файл input.txt файл расшифровывается хорошо кроме последних нескольких символов.
Что же может быть, я думаю, что я не правильно записываю последние байты, но уже перепробовал всё, ничего не помогло.
fread возвращает 0. вы не думаете waleri прав? неее... что в бинорном, что в текстовом fread читает до eof вы не смоете прочесть этй функции дальше, просто несможете.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 28.12.2012, 23:23   #15
ManHunterGroms
Пользователь
 
Регистрация: 15.12.2011
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
fread возвращает 0. вы не думаете waleri прав? неее... что в бинорном, что в текстовом fread читает до eof вы не смоете прочесть этй функции дальше, просто несможете.
я же написал, что дочитываю нужные (size - total_read) байт.
ManHunterGroms вне форума Ответить с цитированием
Старый 28.12.2012, 23:27   #16
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от ManHunterGroms Посмотреть сообщение
я же написал, что дочитываю нужные (size - total_read) байт.
если вы так всё шикарно читаете, не задумываетесь ли вы где там 4 байта ушло? лучше используйте fgets ей не важно.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 28.12.2012, 23:36   #17
ManHunterGroms
Пользователь
 
Регистрация: 15.12.2011
Сообщений: 11
По умолчанию

хорошо, допустим. Но как я запишу в переменную unsigned long данные которые буду считывать?
ManHunterGroms вне форума Ответить с цитированием
Старый 29.12.2012, 00:09   #18
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от ManHunterGroms Посмотреть сообщение
хорошо, допустим. Но как я запишу в переменную unsigned long данные которые буду считывать?
как? как? char 1 байт
unsigned long 4 байта
хотя всё критично от самого вида компилации

Код:
while(!feof(f)) 
{
    fgets((char*)data, sizeof(data), f);
}
data дата может быть, что угодно, будь числом, символом, или вобще хрен знает что. всё равно чар 1 байт, и ей поф. функция возвратит NULL при крахе.
//----
и да не забудьте, что дата это уже указатель, на что либо.
//-----
размер sizeof(data) тут дата принимает целый тип, а не указатель, лонг инт дабл или ваще чё хочешь.
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 29.12.2012 в 00:13.
Perchik71 вне форума Ответить с цитированием
Старый 29.12.2012, 00:26   #19
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Читать двоичные данные через fgets() возможно, но настолько геморойно, что проще использовать fread()
waleri вне форума Ответить с цитированием
Старый 30.12.2012, 00:51   #20
ManHunterGroms
Пользователь
 
Регистрация: 15.12.2011
Сообщений: 11
По умолчанию

Сделал нормальное чтение/запись, теперь появился ещё вопрос... При неполном заполнении блока я заполняю его нулями, но при расшифровке в тексте эти нули преобразуются в пробелы. Как мне можно убрать эти пробелы? могу ли я как-то обработать последний блок с данными чтобы убрать нули?
ManHunterGroms вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование файла by_Trojan C# (си шарп) 2 07.04.2012 20:28
шифрование файла (Assembler) phantom4eg Помощь студентам 2 10.04.2010 16:36
Шифрование файла. dip Помощь студентам 1 04.12.2009 10:17
шифрование и дешифрование файла Анастасия123456789 Помощь студентам 1 05.05.2009 15:47
Реализация BlowFish на Delphi Unconnected Общие вопросы Delphi 2 19.02.2009 12:52