@kos_dev

Как узнать, что был достигнут конец файла при чтении шифрованного файла?

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

Содержимое зашифрованного файла
Зашифрованный текст
[*55
C*?35D��}<G��C?45C*@�5!D�@��D�@�5'�<,F:��?16�C?(5!�<!F#�C(?35�v?5'�=�F9*<!F�D���5C!?*6��<!F#9,<,G�D�G�91< F#:�yF9(�?35�=�F91<$F�C?46�D��G�:�<-G�91<,FsC�F"9(�@�5C@�91=�G�9)<'G�C?+5 �< F#:�yF�:�=�G�92<F �C'?.�:�?(�:�<-G�9*�@��:�<!F#9+<+�5D�?&5C*?2�sC@5C'@�9.<'�6�C!@���C&?45C*�G�:��?35C)?&5C$?*5!D�@�sC�G�9#<&F9(�?35�<!F90=��6�C!?'6��<)G�:�<"F#9/�yF�91<"F9#�?25C)@�90<F$:�<G�90<-�6�D��F#9$<'F9+=�G�}v?5C&?45"�<&F:�<*G�9&<-F�D��F91=�F:�=�G�D�?(5'C!?/�sC@�5'C@�:�=�F:�<G�:��?55'C#?46�C*?2�:�<,F9)<$F":�<$�o9<!F#9,�?)6�C!@��9/<,F�C ?45D�?45C!@�5C'?.�9/<'F 9(<(�o9<-F�C+@�5!C?45C*@��K���G�9(=�F"9+=��6�C?45!D�F9%<'F9(<,G�9(�y�5��=�F91<$F�C@�5C"?*5�<.F#90=�G�90<-�5%C)?+�91<#F"91�yF:��?16�C?.6�D��F:�=�G�9+=���K���G�C*@�5$C!?5�9'<F90<-�o�����������������������������o��������䢅������Ք���މ�����Γ���ʉ���o���ݖ��������������ҏ���ی���Γ������Ѯ��ؓ����ݓ����ԓ�ݖ���ћ����ڏ��������s�ُ�ˉ�����ϟ���щ�����ݟ���׉������Ѯ���������ԏ���،���ݓ���ԉ�����������Ю��ד���҉�����K�������������������ד���Ө}���ҏ��������U��ى�ڏ�ʕ��ޖ���������Ӏ������ʉ���������ˉ���ޅ������ݓ���Ө}v���ݓ����ݓ�ޖ���ڏ�����Ֆ������ٕ}���ى�ߏ�ԉ����ɉ���������ʉ�ۏ������ۑs������؏�މ�������ז������Չ���������s��������Ӗ����ۅ�����Ӊ�ҏ����я����y���瘏���ؘ����،�䑉�����ꌸ�����������ɤ}����Γ���ى��ݖ��،���ޓ�����瘏��͓���҉����ɗ}vy


Пытался подобными способами, getline не возвращает ничего после второй строки:
geline попытка
ifstream inf(inputFilename, ios::in);
		while (inf.eof() != false)
		{
			getline(inf, count);
			fileData += count + '\n';
		}
		inf.close();


memblock читает файл полностью, но это невозможно расшифровать
memblock
ifstream inf(inputFilename, ios::in | ios::binary | ios::ate);
		inf.seekg(0, ios::end);
		int length = inf.tellg(); // Длина текста в файле
		inf.seekg(0);

		char* memblock = new char[length];
		inf.read(memblock, length);
		inf.close();
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
getline встречает символ ЕОТ (0x04, End Of Text) и завершает чтение.
С такими файлами надо работать в бинарном режиме. И не вставлять в них переносы строки, поскольку вы не отличите их от символов, которые в закодированном виде превратились в \r (0x0D) и \n (0x0A).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы