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

программа копирования файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
yumik
2 / 2 / 0
Регистрация: 11.11.2009
Сообщений: 28
07.04.2010, 21:53     программа копирования файла #1
написать программу копирования файла в двойном экземпляре.Чтение файла происходит блоками.Обработать ошибки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yumik
2 / 2 / 0
Регистрация: 11.11.2009
Сообщений: 28
12.04.2010, 20:02  [ТС]     программа копирования файла #2
у кого какие мысли по данной программе?
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
13.04.2010, 09:12     программа копирования файла #3
Что значит "в двойном экземпляре" ?

Взять исходники программы "cp" из Linux/FreeBSD/UNIX.
Hell Knight
 Аватар для Hell Knight
230 / 84 / 3
Регистрация: 11.03.2010
Сообщений: 290
13.04.2010, 09:27     программа копирования файла #4
ну для windows подойдет CopyFile()
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
13.04.2010, 10:36     программа копирования файла #5
Мысли такие:
1. Открываешь файл для чтения.
2. Организовываешь буфер копирования размером в один блок (например, 16Кб). Так если файл будет 3Гб, то его не придется целиком заталкивать в память.
3. Создаешь файл-копию.
4. Последовательно блок за блоком через буфер копируешь файлы.

Добавлено через 20 минут
То есть примерно вот так:
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
50
51
#include <fstream>
#include <string>
 
int main()
{
    // Размер буфера 
    const int buf_size = 15638;
 
    // Имя исходного файла
    std::string src_file = "file.txt";
    std::string out_file = "file_copy.txt";
    
    // Создание потока для работы с исходным файлом
    std::ifstream ifs(src_file.c_str(), std::ios::binary);
 
    // Подсчет размер исходного файла
    ifs.seekg(0, std::ios::end);
    std::ios::pos_type src_size = ifs.tellg();
    ifs.seekg(0, std::ios::beg);
 
    // Количество целых проходов (для частей файлы, которые полностью умещаются в буфер)
    size_t a_mount = src_size / buf_size;
    // Остаток (остаток файла)
    size_t b_mount = src_size % buf_size;
 
    
    // Создание потока для файла-копии
    std::ofstream ofs(out_file.c_str(), std::ios::binary);
 
    // Это буфер
    char buf[buf_size];
 
    // Цикл по числу полных проходов
    for(size_t i = 0; i < a_mount; ++i)
    {
        ifs.read(buf, buf_size);
        ofs.write(buf, buf_size);
    }
    
    // Если есть остаток
    if(b_mount != 0)
    {
        ifs.read(buf, b_mount);
        ofs.write(buf, b_mount);
    }
 
    ifs.close();
    ofs.close();
 
    return 0;
}
Yandex
Объявления
13.04.2010, 10:36     программа копирования файла
Ответ Создать тему
Опции темы

Текущее время: 23:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru