Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Файлы, помогите разобратся 
V
    Опции темы
Metalex
Дата 7.4.2010, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Доброго времени суток всем участникам!
Нарыл примерчик, который должен копировать содержимое одного файла в другой.
Оставьте, пожалуйста, комментарии к программе - что и почему происходит.
Кстати, прога заканчивает действие с результатом "1".
Спасибо!
Код

#include <iostream>
#include <fstream>
using namespace std;

void error (const char*text1, const char*text2="")
{
    cerr<<text1<<" "<<text2<<endl;
    exit(1);
}

int main (int argc, char*argv[])
{
    if (argc!=3) error ("Nevernoe chislo argymentov");

    ifstream from (argv[1]);
    if (!from) error ("Vhodnoi fail ne naiden", argv[1]);

    ofstream to (argv[2]);
    if (!to) error ("Vuhodnoi fail ne naiden", argv[2]);

    char ch;
    while (from.get(ch))
    {
        to.put(ch);
        if (!to) error ("Oshibka zapisi dannuh (disk perepolnen)");
    }
    
    cout<<"Copyrovanie iz "<<argv[1]<<" v "<<argv[2]<<" zaversheno"<<endl;
    system ("Pause");
    return 0;
}


Добавлено через 26 секунд
еще.. не очень понятно действие argv[]


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
boostcoder
Дата 7.4.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



это простое копирование файла. при том, не очень рациональное.

как-то так, по приличнее будет.
Код

void copyfile(const std::string& to, const std::string& from) {
   std::ofstream(to.c_str(), std::ios::binary) << std::ifstream(from.c_str(), std::ios::binary).rdbuf();
}


PM WWW   Вверх
Metalex
Дата 7.4.2010, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



boostcoder, еще больше меня запутал smile


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
azesmcar
Дата 7.4.2010, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Metalex

Ну скажи тогда хоть какую ошибку выводит smile
PM   Вверх
Metalex
Дата 7.4.2010, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



azesmcar, да я же говорю, не в ошибках дело smile
Просто прокомментируйте код, пожалуйста!


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
azesmcar
Дата 7.4.2010, 21:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Код

#include <iostream>
#include <fstream>

using namespace std;

// функция для вывода сообщений об ошибке и выхода из программы, явно лишняя
void error (const char*text1, const char*text2="")
{
    // выводит ошибку
    cerr<<text1<<" "<<text2<<endl;

    // выходит из программы
    exit(1);
}

int main (int argc, char*argv[])
{
    // если количество переданых аргументов программе
    // при вызове из командной строки не равно 3м - выйти из программы
    if (argc!=3) error ("Nevernoe chislo argymentov");

    // открыть входной файл
    // (имя файла передается первым аргументом, нулевой - имя самого исполняемого файла)
    ifstream from (argv[1]);

    // если не сумел открыть - вывести ошибку и завершить программу
    if (!from) error ("Vhodnoi fail ne naiden", argv[1]);

    // создать файл для копирования
    // (имя файла передается вторым аргументом, нулевой - имя самого исполняемого файла)
    ofstream to (argv[2]);
    
    // если не сумел открыть - вывести ошибку и завершить программу
    if (!to) error ("Vuhodnoi fail ne naiden", argv[2]);

    char ch;
    // читать, пока есть что читать из файла
    while (from.get(ch))
    {
        // запись во второй файл
        to.put(ch);
        
        // если произошкла ошибка вывести сообщение и завершить программу
        if (!to) error ("Oshibka zapisi dannuh (disk perepolnen)");
    }
    
    // вывести сообщение об успешном завершении
    cout<<"Copyrovanie iz "<<argv[1]<<" v "<<argv[2]<<" zaversheno"<<endl;

    // подождать нажатия кнопки
    system ("Pause");

    // вернуть 0
    return 0;
}


Добавлено через 2 минуты и 44 секунды
Metalex

argc - количество переданных аргументов из командной строки
argv - сами аргументы

например когда из Command Prompt вызываем программу
Код

MyProject.exe one two

argc = 3
argv[0] = MyProject.exe
argv[1] = one
argv[2] = two

PM   Вверх
Metalex
Дата 7.4.2010, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



azesmcar, но ведь когда я просто скомпилю в Visual Studio 2008 мне ведь не нужно вводить
Код

MyProject.exe one two

Откуда компилятор об этом узнает? Какие файлы открывать нужно?


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
azesmcar
Дата 7.4.2010, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Metalex @  7.4.2010,  21:25 Найти цитируемый пост)
azesmcar, но ведь когда я просто скомпилю в Visual Studio 2008 мне ведь не нужно вводить


Цитата(Metalex @  7.4.2010,  21:25 Найти цитируемый пост)
Откуда компилятор об этом узнает? Какие файлы открывать нужно? 

компилятор не узнает, ему это не интересно, эти аргументы передаются при вызове программы.
PM   Вверх
Metalex
Дата 7.4.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Еще: файлы нужно создавать вручную или при компиляции они создаются?


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
azesmcar
Дата 7.4.2010, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Metalex @  7.4.2010,  21:29 Найти цитируемый пост)
Еще: файлы нужно создавать вручную или при компиляции они создаются? 

брррр smile 
о каких файлах идет речь? при компиляции создается исполняемый файл и куча других файлов, которые нужны для компиляции...если речь идет о файлах, которые копируются то нет конечно, они с программой никак не связаны, что передашь то и скопирует.
PM   Вверх
Metalex
Дата 7.4.2010, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



И все-таки.......  smile 
где вводить
Код

MyProject.exe one two

?

Добавлено через 1 минуту и 18 секунд
Я исполняю, мне выводит
Цитата

Nevernoe chislo argymentov



--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
azesmcar
Дата 7.4.2010, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Start->Run
cmd.exe
<enter>
cd ПУТЬ_К_ПАПКЕ_С_ФАЙЛОМ
MyProject.exe c:\file_input.txt c:\file_output.txt

в папке с проектом есть папка Debug или Release (в зависимости от опций проекта), в нем твой исполняемый файл (MyProject.exe или как он там называется)
PM   Вверх
Metalex
Дата 7.4.2010, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



azesmcar, спасибоще!!  smile 


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.