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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2016, 15:53   #1
max.krejjk
 
Регистрация: 20.05.2016
Сообщений: 9
Сообщение Шифрование файла С++

Помогите с шифрованием файлов. Тема: шифрование файлов реализованное императивно и объектно-ориентированно на С++.
Алгоритм:
1) Вывод запроса пути исходного файла
2) Вывод запроса пути итогового файла
3) Запрос сдвига. Пределы сдвига
3) Использование шифра Цезаря к содержимому исходного файла
4) Запись полученных данных в итоговый файл
5) Вывод "Выполнено успешно"

Код:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
FILE* oldf;
FILE* newf;
char *line;
unsigned int c;
char* i_f;
char* o_f;
int shift;
int main() {
	setlocale(LC_ALL, "ru-RU");
	cout << "Введите полный путь до исходного файла \n";
	cin >> i_f;
	cout << "Введите полный путь куда сохранить обработанный файл \n";
	cin >> o_f;
	cout << "Введите величину сдвига";
	cin >> shift;
	oldf = fopen(i_f, "r");
	if (oldf != NULL)
	{
		newf = fopen(o_f, "w");
		while (fgets(line, 255, oldf) != NULL)
		{
			for (c = 0; c < strlen(line); c++)
				if (line[c] == 255)
					line[c] = char(shift-1);
				else
                                        line[c]=char(int(line[c]+shift));
			fputc(line[c], newf);
		}
		fclose(newf);
	}
	else
		puts("Not file");
}
При запуске программы выводит
Debug Assertion Failed!
Program: C:\Windows\System32\MSVCP140D.dll
File: C:\Program Files(x86)\Microsoft Visual Studio 14.0\vc\include\istream
Line 1009

Expression: invalid null pointer

ЧЯДНТ? И как такую мелочь переписать в стиле ООП?

Последний раз редактировалось max.krejjk; 20.05.2016 в 16:53. Причина: append
max.krejjk вне форума Ответить с цитированием
Старый 21.05.2016, 12:59   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Проблемма в месте: cin >> i_f;

Я набрасал программу, которая запрашивает путь с консоли (у меня файл расположен c:/1.txt), потом открывает его и читает 1-у строчку выводя её попутно на экран. Поиграйся с ней.
p.s.: Если ты захочешь все-таки открывать открывать файл по твоему, тогда помни, что функция getline(cin, in); возвращает Sctring. Нужно приводить типы к *char методом in.c_str() - (oldf = fopen(in.c_str(), "r")


Код:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<conio.h>
#include<cstdlib>
#include<string>
#include <fstream>

using namespace std;



int main() {
	setlocale(LC_ALL, "ru-RU");
	
	cout << "Введите полный путь до исходного файла \n";
	string in;
	getline(cin, in);
	
	char a1[15];
	fstream in1(in, ios_base::in); 
	if (!in1.is_open())                           // Проверка открылись ли все файлы
		cout << "Ошибка чтения файла\n\n\n";
	else
	{
	
		in1.getline(a1, 15);
		in1.close();
	}

	cout << endl << a1 << endl;
	

	system("pause");
	return 0;
}

ura_111 вне форума Ответить с цитированием
Старый 21.05.2016, 13:57   #3
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Цитата:
Сообщение от max.krejjk Посмотреть сообщение
Алгоритм:
1) Вывод запроса пути исходного файла
2) Вывод запроса пути итогового файла
3) Запрос сдвига. Пределы сдвига
3) Использование шифра Цезаря к содержимому исходного файла
4) Запись полученных данных в итоговый файл
5) Вывод "Выполнено успешно"
.................
И как такую мелочь переписать в стиле ООП?
Работу с файлами вынести в класс
Шифр Цезаря тоже в класс вынести, передавая ему объекты связанный с файлами и сдвиг.... чтоб это был не тупо класс из одного метода на три параметра, будет уместным сделать передачу этих самых сдвигов (сорри, не в курсе деталей шифра) в конструктор... тогда можно раз создать, настроить, и потом использовать на любом количестве файлов
если вообще делать грамотно, то можно выделить класс "поток байт" и уже его шифровать, а "файл" уже будет его "наследником"
GreenWizard вне форума Ответить с цитированием
Старый 23.05.2016, 21:14   #4
max.krejjk
 
Регистрация: 20.05.2016
Сообщений: 9
Печаль Fail :D

Код:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<conio.h>
#include<cstdlib>
#include<string>
#include <fstream>
using namespace std;
FILE* oldf;
FILE* newf;
char *line;
unsigned int c;
string i_f, o_f;
int shift,i;
int main() {
	setlocale(LC_ALL, "ru-RU");
	cout << "Введите полный путь до исходного файла \n";
	getline(cin, i_f);
	cout << "Введите полный путь куда сохранить обработанный файл \n";
	getline(cin, o_f);
	cout << "Введите величину сдвига";
	cin >> shift;
	fstream oldf(i_f, ios_base::in);
	if (!oldf.is_open())
	{
		puts("Not file");
		system("pause");
	}
	else
	{
		oldf.read(line, sizeof(oldf));
		fstream newf(o_f, ios_base::out);
		for (c = 0; c < strlen(line); c++)
			line[c] = line[c] ^ shift;
		newf.write(line, sizeof(line));
		newf.close();
	}
	oldf.close();
	cout << "All ok";
	system("pause");
}
Переписал, теперь fail на строке : oldf.read(line, sizeof(oldf));
SOS!
max.krejjk вне форума Ответить с цитированием
Старый 23.05.2016, 21:18   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

а вы чего хотели? кто память выделять будет? чар* это только указатель
p51x вне форума Ответить с цитированием
Старый 26.05.2016, 08:27   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вы что не читали мой комментарий - посмотрите, что написано про oldf.read(line, sizeof(oldf));
ura_111 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование файла fairplau Помощь студентам 21 09.04.2015 00:43
Программа C# на VS, шифрование файла evklid Фриланс 2 30.12.2012 17:37
Шифрование файла by_Trojan C# (си шарп) 2 07.04.2012 20:28
Шифрование содержимого файла kholoshchak Общие вопросы Delphi 3 09.06.2011 01:25
Шифрование файла. dip Помощь студентам 1 04.12.2009 10:17