powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запись в файл-проскакивают ошибки
4 сообщений из 4, страница 1 из 1
Запись в файл-проскакивают ошибки
    #39169962
ukugyul552465
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть код:
Код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#pragma warning(disable: 4996);
using namespace std;
int main()
{

    unsigned long long I = 0;
    char *G = new char[1000000];
	FILE *F;
    F=fopen("target.exe", "rb");

	fread(G, sizeof(char), 178000, F);

	fstream FG;
	FG.open("out.exe", ios::app);
	for (unsigned long long i = 0; i < 178000; i++)
	{
		cout << G[i];
		FG << G[i];
	}
	cin.get();
	cin.get();
	return 0;
}


Цель - считать побайтово exe-файл, записывая его в массив сhar и записать это массив в выходной файл .exe.
Вроде бы всё нормально, но exe не запускается.
В WinHex видно, что по смещению 00000070 восьмой байт искажён и далее происходит смещение на один байт вправо.

Чем это может быть вызвано?
P.S. Каким образом определить размер файла в байтах(функция), что бы не создавать массив примерного размера?
...
Рейтинг: 0 / 0
Запись в файл-проскакивают ошибки
    #39169992
Гость123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потому что выходной файл в текстовом режиме открываешь. Нужно
Код: plaintext
1.
FG.open("out.exe", ios::app | ios::binary);




Определить размер файла можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
int get_filesize_F(FILE *f, long* size)
    {
    long end_pos;
    const long cur_pos = ftell(f);
    if (cur_pos == EOF)
        goto GET_FILESIZE_F_FAIL;
    if (fseek(f, 0, SEEK_END) != 0)
        goto GET_FILESIZE_F_FAIL;
    end_pos = ftell(f);
    if (end_pos == EOF)
        goto GET_FILESIZE_F_FAIL;
    if (fseek(f, cur_pos, SEEK_SET) != 0)
        goto GET_FILESIZE_F_FAIL;
    *size = end_pos;
    return 0;
GET_FILESIZE_F_FAIL:
    assert(errno != 0);
    return errno;
    }
...
Рейтинг: 0 / 0
Запись в файл-проскакивают ошибки
    #39170022
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость123Определить размер файла можно так
Но проще - читать пока читается. Именно поэтому fread() - ФУНКЦИЯ .
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в файл-проскакивают ошибки
    #39170352
ukugyul552465
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, разобрался.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запись в файл-проскакивают ошибки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]