Prinzipiell: Weil es offenbart, dass man die Datei zeichenweise liest (=extrem langsam). In C gibt es das weitere Problem, dass EOF ein Zeichen ist (was in Binärdateien vorkommen darf).Noch eine Frage: Warum kein ".eof()"?
Gruss
cwriter
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Prinzipiell: Weil es offenbart, dass man die Datei zeichenweise liest (=extrem langsam). In C gibt es das weitere Problem, dass EOF ein Zeichen ist (was in Binärdateien vorkommen darf).Noch eine Frage: Warum kein ".eof()"?
Datei Datei::bFormatieren(Datei datei) {
char * form="";
int rot=0;
for (int i = 0; i < text.length(); i++) {
rot++;
if (rot > datei.passwort.length()) {
rot = 0;
}
form += datei.binary[i] ^ datei.passwort[rot];
}
datei.binary = form;
return datei;
}
Datei Datei::bSchreiben(Datei datei) {
std::ofstream quelle;
quelle.open(datei.dateiPfad, std::ios::out | std::ios::binary);
if (!quelle) {
std::cout << "Error1!\n";
}
else {
quelle.write(datei.binary, sizeof(datei.binary));
}
datei.binary = "";
return datei;
}
Datei Datei::binaryLesen(Datei datei) {
system("cls");
std::cout << "Passowrt zum ver- oder entschlüsseln eingeben: \n";
std::cin.ignore();
std::getline(std::cin, datei.passwort);
std::cout << "Dein Passowort: " << datei.passwort << "\n";
std::string zeile;
std::ifstream quelle;
quelle.open(datei.dateiPfad, std::ios::binary);
if (!quelle) {
std::cout << "Error1!\n";
system("pause");
}
else {
quelle.seekg(0, quelle.end);
datei.bLength = quelle.tellg();
quelle.seekg(0, quelle.beg);
//create platz
datei.binary = new char[datei.bLength];
// read data as a block:
std::cout << "Reading " << datei.bLength << " characters... ";
quelle.read(datei.binary, datei.bLength);
if (quelle) {
std::cout << "all characters read successfully.\n"<<sizeof(datei.binary);
}
else {
std::cout << "error: only " << quelle.gcount() << " could be read";
quelle.close();
}
}
return datei;
}
#include <string>
class Datei {
std::string text;
std::string passwort;
char * binary;
int bLength;
public:
std::string dateiPfad;
Datei einlesen(Datei txt);
Datei formatieren(Datei txt);
Datei schreiben(Datei txt);
Datei entFormatieren(Datei txt);
Datei binaryLesen(Datei txt);
Datei bFormatieren(Datei txt);
Datei bSchreiben(Datei txt);
};
Datei Datei::bFormatieren(Datei datei) {
std::string text=datei.binary;
int rot=0;
for (int i = 0; i < text.length(); i++) {
rot++;
if (rot > datei.passwort.length()) {
rot = 0;
}
datei.binary[i] = datei.binary[i] ^ datei.passwort[rot];
}
return datei;
}
Ein std::vector ist ein STL-Container, der Dynamisch wachsen kann und Random Access erlaubt. Im Prinzip ist es ein Array auf dem Heap. Die Klasse übernimmt die Vergrösserung / Verkleinerung nach Bedarf für dich.Mit vectoren habe ich bis jetzt nichts gemacht ist das kurz zu erklären?
std::vector<int> vec; //Ungefähr int* vec, aber automatisch new bei push_back (NICHT bei []-Indexierung).
vec.push_back(1);
vec.push_back(42);
//vec[0] == 1
//vec[1] == 42
//vec.size() == 2
vec.pop_back();
//vec[0] == 1
//vec.size() == 1
//Ähnlich Strings, aber ohne + und ohne Zeichenbeschränkungen (Strings haben theoretisch auch keine, aber es vermischt sich sehr ins Ungenaue...)
std::string str;
str += 1;
str += 42;
//str[0] == 1
//str[1] == 42
Du du ihn ja initialisierst, macht das nicht wirklich etwas. Es ist einfach ein bisschen mehr Aufwand. Dann ist es aber komisch, dass du noch einen std::string text hast? Den brauchst du ja eigentlich nicht, wenn du schon einen char* hast, womit du die Daten speicherst?Der binary Member ist wohl ein char * :|
datei.binary[i] = datei.binary[i] ^ datei.passwort[rot];
//Lässt sich schreiben als:
datei.binary[i] ^= datei.passwort[rot];
Datei Datei::bFormatieren(Datei datei) //Kopie
Datei Datei::bFormatieren(Datei& datei) //Referenz
Du kannst die Dateien sonst einfach zippen und hochladen. (Bitte nicht alles aus VS, nur die Codedateien).Das ganze Programm habe ich in 3 Dateien ausgelagert: Header Datei(also Klasse ich poste sie hier rein), Implementierung (die Codeschnipsel) und die main halt(auch sehen?)
Im Forum hier.Die Dateien kann ich mal hochladen, bevorzugst du eine bestimte Seite oder soll ichs auf Irgendeiner hochladen?
Du solltest keinen Texteditor verwenden (oder Notepad++ und die nichtdruckbaren Zeichen darstellen lassen). Texteditoren wie Editor.exe ignorieren die Nichtdruckbaren einfach. Ein Hexeditor wie HxD wird dir alle Werte anzeigen.Wenn ich das wort "Mein" verschlüssele mit dem pw "cloud" steht in der verschlüsselten txt ein "!".