Kopiowanie *.exe.

0

Dlaczego program:

#include <iostream>
#include <fstream>

using namespace std;

int main(int argv, char **argc, char** env)
{
    fstream plik("program.exe", ios::in | ios::binary);
    fstream plik2(program2.exe", ios::out | ios::binary);

    char znak;

    while(!plik.eof())
    {
        plik >> znak;
        plik2 << znak;
    }

    return 0;
}

Nie kopiuje wszystkich znaków??

0

Po pierwsze patrząc na ten kod co wstawiłeś on w ogóle nie powinien się skompilować. Pacz linia nr 9

1

Kopiuje, a nawet więcej. Flaga EOF zapala się dopiero po nieudanej próbie odczytu. Tak więc najpierw próbujemy coś wczytać (plik >> znak) a dopiero później sprawdzamy, czy wczytanie się udało (np. sprawdzamy, czy plik.eof()). Można to zrobić za jednym zamachem:

while (plik >> znak) {
   /* ... */
};
0

@mr_jaro Nie. Po prostu przy "wklejaniu" ucięło ".

@adf88 jak więcej?! Nawet jeśliby byłoby więcej to i tak ma przekopiować dokładnie "bit po bicie".

Ciągle nic nie maga ;/ Ma Ktoś jeszcze jakiś pomysł?

0

Rzecz w tym, że operator >> pominie np. białe znaki. Zamiast while(plik >> znak) użyj while(plik.get(&znak)) while(plik.get(znak))

0

@byku_guzio dzięki, ale tam powinno być bez &

@Shalom a jednak ma znaczenie ;)

1

Jeśli chcesz zrobić po prostu dokładną kopię pliku to możesz użyć takiego kodu:

bool CopyFile(const std::string &from, const std::string &to)
{
    return std::ofstream(to.c_str(), std::ios::trunc | std::ios::binary) << std::ifstream(from.c_str(), std::ios::binary).rdbuf();
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1