Нужно написать программу для шифрования и дешифрования файла за указанным именем. у меня не получается зашифровать файл поскольку прогамма не изменяет файл, а шифрует лишь то что получило читая файл(не оригинал файла).
Вот мой код :
#include <iostream>
#include <fstream>
#include <ctime>
#include <string>
using namespace std;
ifstream Print(string &path);
void encryption(string &path, ifstream &fin);
void decryption(string path, ifstream &fin);
int main()
{
setlocale(LC_ALL, "ru");
string path;
ifstream fin;
cout << "Enter the path of the file : ";
cin >> path;
cout << "Output file\n";
fin = Print(path);
encryption(path, fin);
Print(path);
decryption(path, fin);
Print(path);
return 0;
}
ifstream Print(string &path)
{
ifstream fin;
fin.open(path);
if (!fin.is_open())
{
cout << "Error opening file\n";
return fin;
}
else
{
string str;
while (!fin.eof())
{
getline(fin, str);
cout << "\n" << str << endl;
}
}
return fin;
}
void encryption(string &path, ifstream &fin)
{
ofstream fout;
fout.open(path);
if (!fout.is_open())
{
cout << "Error opening file\n";
return;
}
else
{
string str;
cout << "\nEncryption" << endl;
while (!fout.eof())
{
for (int i = 0; i < str.length(); ++i)
{
str[i] += 1;
}
fout << str;
}
fout.close();
}
}
void decryption(string path, ifstream &fin)
{
ofstream fout;
fout.open(path);
if (!fout.is_open())
{
cout << "Error opening file\n";
return;
}
else
{
string str;
cout << "\nDecryption" << endl;
while (!fout.eof())
{
getline(fin, str);
for (int i = 0; i < str.length(); ++i)
{
str[i] -= 1;
}
fout << str;
}
fin.ignore();
fin.close();
}
}
Вы что вообще делаете вот сдесь:
while (!fout.eof())
{
for (int i = 0; i < str.length(); ++i)
{
str[i] += 1;
}
fout << str;
}
И такой же бред в другой ф-ции. Вы что пытаетесь сделать? Вы вкурсе, что fout записывает в файл, а не читает из него! Убирети это, так программа хотя бы завершаться будет.
И как вы обращаетесь с fin? Кто так делает? Открыли, прочитали и закрыли!!! А не открыли, прочитали, потом открыли другим методом, а на то, чтобы закрыть поток - так вообще наплевать. Конечно у вас ничего не записывает.
И вот сдесь:
for (int i = 0; i < str.length(); ++i)
{
str[i] += 1;
}
fout << str;
Это, я так понимаю вы шифруете, так? А что вы шифруете? Это ж пустая строка!!!
Вот я вам поправил кое-что, дальше сами:
#include <iostream>
#include <fstream>
#include <ctime>
#include <string>
using namespace std;
string Print(string &path);
void encryption(string &path, string &);
int main()
{
setlocale(LC_ALL, "ru");
string path;
cout << "Enter the path of the file : ";
cin >> path;
cout << "Output file\n";
string data = Print(path);
std::cout << "data " << data << endl;
encryption(path, data);
Print(path);
return 0;
}
string Print(string &path)
{
ifstream fin;
fin.open(path);
string str;
if (fin.is_open()) {
getline(fin, str);
cout << "\n" << str << endl;
fin.close();
}
return str;
}
void encryption(string &path, string &d)
{
ofstream fout;
fout.open(path);
if (!fout.is_open())
{
cout << "Error opening file\n";
return;
}
else
{
cout << "\nEncryption" << endl;
for (int i = 0; i < d.length(); ++i)
{
d[i] += 1;
}
fout << d;
fout.close();
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей