Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dan_strong
6 / 6 / 0
Регистрация: 28.12.2010
Сообщений: 113
#1

копирование файлов - C++

05.11.2012, 21:53. Просмотров 492. Ответов 5
Метки нет (Все метки)

Всем приятного времени суток!
Мне нужно просто скопировать файл, вроде ничего сложного) Сделал так:
C
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
28
29
30
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
int main()
{ 
    FILE *F1 = fopen("11.exe", "rb" );
    FILE *F2 = fopen("22.exe", "wb" );
 
    fseek(F1, 0, SEEK_END);
    int file_size = ftell(F1);
    rewind(F1);
 
    char *buffer = (char*)malloc(file_size);
 
    if(fread(buffer, 1, file_size, F1) != file_size)
    {
        printf("Couldn't read!");
    }
 
    if(fwrite(buffer, 1, file_size, F2) != file_size)
    {
        printf("Couldn't write!");
    }
 
    printf("Success!");
    fclose(F1);
    fclose(F2);
    getch();
}
все работает хорошо.
Но мне это нужно для передачи файла с сервера на клиент, разбил предыдущий код на 2 функции:
C
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
 
void ReadFile(char *source, char *buffer)
{   
    FILE *F = fopen(source, "rb");
    fseek(F, 0, SEEK_END);
    int file_size = ftell(F);
    rewind(F);
 
    char *str = (char*)malloc(file_size);
 
    if(fread(str, 1, file_size, F) != file_size)
    {
        printf("Couldn't read!");
    }
     strcpy(buffer, str);
     fclose(F);
}
 
void WriteFile(char *dest, int size, char *buffer)
{
    FILE *F = fopen(dest, "wb");
 
    if(fwrite(buffer, 1, size, F) != size)
    {
        printf("Couldn't write!" );
    }
    fclose(F);
}
 
int main()
{ 
    FILE *F = fopen("33.jpg", "rb"); 
    fseek(F, 0, SEEK_END);
    int file_size = ftell(F);
    rewind(F);
    fclose(F);
 
    char *buffer = (char*)malloc(file_size);
 
    ReadFile("33.jpg", buffer);
    WriteFile("22.jpg", file_size, buffer);
 
    printf("\nSuccess!");
    getch();
}
Нормально работает только с текстовыми файлами, когда копирую .exe, файл копируется, размер тот-же, но ормально не запускается! Вот!)) Подскажите как решить эту проблему
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2012, 21:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос копирование файлов (C++):

Копирование файлов - C++
Приветствую. Пытался написать программу для копирования содержимого одного файла в другой: #include &lt;iostream&gt; #include...

Копирование файлов - C++
Народ, дайте пожалуйста исходник копирования файлов по принципу &quot;открыть файл1 -&gt; считать в буфер содержимое -&gt; открыть файл2 -&gt; заменить...

копирование файлов - C++
Зраствуйте можете подсказать алгоритм копирования файлов любого типу(разширения)??

Копирование файлов C++ - C++
Прошу помочь найти в чем здесь ошибка. Условие: Дан текстовый файл на русском языке. Скопировать содержимое данного файла в новый...

Побайтовое копирование файлов - C++
Добрый день. Подскажите пожалуйста,как в данном примере можно было бы выполнить копирование файла в обратном порядке? ifstream...

Копирование, сортировка файлов - C++
Добрый день! У меня в папке много различных файлов необходимо, переместить или скопировать их по различным созданным папкам(сортировка не...

5
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
05.11.2012, 22:02 #2
Цитата Сообщение от dan_strong Посмотреть сообщение
но ормально не запускается!
Что значить нормально не запускается?
1
dan_strong
6 / 6 / 0
Регистрация: 28.12.2010
Сообщений: 113
05.11.2012, 22:22  [ТС] #3
Цитата Сообщение от kazak Посмотреть сообщение
Что значить нормально не запускается?
Пишет: Версия этого файла несовместима с используемой версией Windows.
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
05.11.2012, 22:46 #4
Цитата Сообщение от dan_strong Посмотреть сообщение
strcpy(buffer, str);
В исполняемом файле очень много нулевых символов, особенно в начале, а нулевой символ является признаком конца строки для strcpy. Т.е. в этом случае копирование будет не корректным. Используйте memcpy или возвращайте указатель на считанные данные из функции.
1
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.11.2012, 22:51 #5
Цитата Сообщение от dan_strong Посмотреть сообщение
strcpy(buffer, str);
Плохая функция. Да и она для нуль-терминированных строк.
1
dan_strong
6 / 6 / 0
Регистрация: 28.12.2010
Сообщений: 113
05.11.2012, 23:08  [ТС] #6
kazak, go, спасибо большое!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2012, 23:08
Привет! Вот еще темы с ответами:

Копирование текстовых файлов - C++
Столкнулся с такой проблемой : при копировании из одного файла в другой мне нужно исключить(пропустить) слова, которые начинаются на букву,...

Написать программу: копирование файлов - C++
Пожалуйста, помогите написать программу, копирующую один файл в другой. Имена файлов программа должна получать из командной строки.Если не...

Копирование данных из файлов в файл - C++
Привет, ребята! :) Мне необходимо написать программу, которая открывает потоки для чтения для двух файлов, и поток для записи - для одного....

Копирование файлов в папку по условию - C++
Дано два каталога(dir1, dir2), содержащих файлы *.txt и не содержащие подкаталогов. Наполнить третий каталог (RESULT): -для каждого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
05.11.2012, 23:08
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru