Datei kopieren
-
Hi,ich will mit volgendem prog eine Datei kopieren,aber des funktioniert nicht,warum?
er startet das prog zwar,er kopiert aber falsch#include <iostream> #include <fstream> #include <string> #include <iomanip> #include <stdio.h> using namespace std; int main(){ char c; bool bit; int zaeler; fstream alt("windows.exe",ios::in | ios::binary); fstream neu("neuwindows.exe",ios::out | ios::binary); for(zaeler=0;alt >> bit==true;++zaeler) { neu << bit; } cin >> c; return 0; }
THX,
Xalon
-
Xalon schrieb:
#include <iostream> #include <fstream> #include <string> #include <iomanip> #include <stdio.h> using namespace std; int main(){ char c; bool bit; int zaeler; fstream alt("windows.exe",ios::in | ios::binary); fstream neu("neuwindows.exe",ios::out | ios::binary); for(zaeler=0;alt >> bit==true;++zaeler) { neu << bit; } cin >> c; return 0; }
Warum einfach, wenn es auch umständlich geht
?
Solange du Windows benutzt:
#include <windows.h> int main (void) { CopyFile ("windows.exe", "neuwindows.exe", FALSE); return (0); }
Und wenn es plattformunabhängig sein soll:
#include <fstream> using namespace std; int main (void) { char c; // bool bit; // wozu? // int zaeler; // ebenfalls: wozu? // Btw: "Zähler" schreibt man mit h! fstream alt ("windows.exe",ios::in | ios::binary); fstream neu ("neuwindows.exe",ios::out | ios::binary); while ((alt.read (&c, 1))) // die Streamoperatoren übergehen Leerzeichen neu.write (&c, 1); return (0); }
Moritz
-
Bool=1bit groß,will nämlich immer nur 1 bit aus der exe lesen,weil ich dateien verschlüsseln will,also dann z.B. anstatt 0 ne 1 in die exe schreiben.
Danke für den code,könnte mir noch wer sagen was read und Write genau macht?liest des einfach ein zeichen?
THX,
Xalon
-
Xalon schrieb:
Bool=1bit groß,will nämlich immer nur 1 bit aus der exe lesen,weil ich dateien verschlüsseln will,also dann z.B. anstatt 0 ne 1 in die exe schreiben.
Bool ist nicht ein Bit, sondern ein Byte groß (der Arbeitsspeicher und auch Dateien auf der Festplatte werden byteweise adressiert); wenn du bitweise auf die Datei zugreifen willst, mußt du sie byteweise auslesen, das Byte bitweise modifizieren und in die andere Datei schreiben.
Danke für den code,könnte mir noch wer sagen was read und Write genau macht?liest des einfach ein zeichen?
Standard C++ Library: Class Reference schrieb:
istream_type&
basic_istream::read(char_type* s, streamsize n);Extracts characters and stores them into successive locations of an array whose first element is designated by s. Characters are extracted and stored until any of the following occurs:
n characters are stored
An end-of-file on the input sequenceIf the function does not store n characters, it calls the basic_ios member function setstate(failbit), which may throw ios_base::failure.
ostream_type&
basic_ostream::write(const char_type* s, streamsize n);Obtains characters to insert from successive locations of an array whose first element is designated by s. Characters are inserted until either of the following occurs:
n characters are inserted
Inserting in the output sequence failsIn the second case the function calls the basic_ios member function setstate(badbit). The function returns *this.
Moritz
-
Xalon schrieb:
Bool=1bit groß
Da würde ich mich lieber nochmal genauer informieren.
-
^^,dachte ich immer da man für 2 verschiedene "schaltweisen" ja nur 1 bit braucht...
THX,
Xalon
-
[quote="audacia"]
Xalon schrieb:
Bool=1bit groß,will nämlich immer nur 1 bit aus der exe lesen,weil ich dateien verschlüsseln will,also dann z.B. anstatt 0 ne 1 in die exe schreiben.
Bool ist nicht ein Bit, sondern ein Byte groß (der Arbeitsspeicher und auch Dateien auf der Festplatte werden byteweise adressiert); wenn du bitweise auf die Datei zugreifen willst, mußt du sie byteweise auslesen, das Byte bitweise modifizieren und in die andere Datei schreiben.
[quote]
Der ursprüngliche boolsche Datentyp ist in der Tat nur 1 Bit gross.
Er kann folglich nur zwei Zustände annehmen:
0 = FALSE
1 = TRUEWahr oder unwahr.
In c++ jedoch wird für bool exakt 1 Byte an Speicher reserviert, und es ist
folglich auch kein wirklicher bool-Datentyp.C++ behandelt das ganze anders:
0 = FALSE
Alles über 0 = TRUEWenn du vom reinen bool ausgehst hast du natürlich recht, aber c++
handhabt es nicht als einzelnes Bit sondern wie schon erwähnt als Byte.@Strogij
Hmm... interesant, wieso genau informieren, vom ursprünglichen bool aus gesehen hat Xalon recht
Soviel zu bool
Searence