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

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

Войти
Регистрация
Восстановить пароль
 
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
#1

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

07.04.2012, 15:39. Просмотров 688. Ответов 1
Метки нет (Все метки)

Приветствую.

Пытался написать программу для копирования содержимого одного файла в другой:

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
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
 
void CopyFile (const std::string& filename_in, const std::string& filename_out)
{
    std::ifstream f_in (filename_in);
    if (!f_in)
    {
        std::cout << "An error occured while opening file" << std::endl;
    }
 
    f_in.seekg (0, std::ios::end);
    int length = f_in.tellg ();
 
    if (length == -1)
    {
        std::cout << "An error occured while reading file" << std::endl;
    }
 
    f_in.seekg (0, std::ios::beg);
 
    char *buffer = new char [length];
    f_in.read (buffer, length);
 
    f_in.close ();
 
    std::ofstream f_out (filename_out);
    if (!f_out)
    {
        std::cout << "An error occured while opening file" << std::endl;
    }
 
    f_out.write (buffer, length);
 
    f_out.close ();
 
    delete[] buffer;
}
 
int main (int argc, char *argv[])
{
    const std::vector <std::string> args (argv + 1, argv + argc);
    const int minAmountOfArgs = 1;
 
    if (argc > minAmountOfArgs &&
        argc % 2 != 0)
    {
        std::copy (args.cbegin (), args.cend (), std::ostream_iterator <std::string> (std::cout, "\n"));
    }
    else
    {
        std::cout << "You need some args" << std::endl;
        return 1;
    }
 
    CopyFile (args.at (0), args.at (1));
 
    return 0;
}
Всё нормально, не считая того, что в конце файла появляются лишние символы. Почему?

А вот так файл вообще не создаётся:

C++
1
2
3
4
for (std::vector <std::string>::size_type i = 0; i < args.size (); ++i)
{
    CopyFile (args.at (i), args.at (++i));
}
По поводу WinAPI-функции CopyFile в курсе, нужно платформо-независимое решение.

Добавлено через 7 минут
При попытке откр. файл с флагом std::ios::binary символы не добавляются в конец файла. Получается, это были символы перевода строки? Но почему они добавлялись в конец файла?

Вариант с циклом, к сожалению, так и не работает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2012, 15:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Копирование файлов (C++):

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

копирование файлов - C++
Всем приятного времени суток! Мне нужно просто скопировать файл, вроде ничего сложного) Сделал так: #include &lt;stdio.h&gt; #include...

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Somebody
2788 / 1602 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
07.04.2012, 16:20 #2
Не знаю, в чём проблема, но копирование делается одной строчкой:
C++
1
f_out << f_in.rdbuf();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2012, 16:20
Привет! Вот еще темы с ответами:

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

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

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

Копирование файлов через сравнение - C++
Сравнить два каталога разницу записать в третий. В третий каталог нужно положить все файлы, которые есть в первом каталоге , но...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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