Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/58: Рейтинг темы: голосов - 58, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 12
1

Копирование содержимого одного файла в другой посредством командной строки

14.03.2012, 20:34. Показов 11748. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,

Передо мной встала задача написать программу, которая работала бы через командную строку, а именно которой можно было бы задавать параметр для адреса исходного файла и параметра для адреса файла в который поступает содержимое, скопированное из оригинала.

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

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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
 
using namespace std;
 
int _tmain( int argc, char* argv[])
{
   FILE *fp1,*fp2;
 
   if ((fp1 = fopen("1.txt","rb"))==NULL)
{printf("Cannot open original file. \n");
exit(1);
}
 
if ((fp2 = fopen("2.txt","wb"))==NULL)
{printf("Cannot open copy file. \n");
exit(1);
}
const int size=256;
char mas[size];
size_t read;
while((read = fread(mas,sizeof(char),size,fp1)) != 0)
{
   fwrite(mas,sizeof(char),read,fp2);
 
}
fclose(fp1);
fclose(fp2);
 return 0;
}
Вот в таком виде программа работает нормально (свою функцию она выполняет по крайней мере).
Однако мне нужно чтобы эта программа работала если бы ее запускали через командную строку.
Только вот сколько я ни пытался использовать argv в качестве параметра адреса файлов, у меня ничего путного так и не вышло (он видит argv и даже выводит мне его обратно через printf однако файл он не копирует).

Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2012, 20:34
Ответы с готовыми решениями:

Копирование содержимого одного текстового файла в другой
Открытие одного текстового файла и создание другого с записью в него информации с первого открытого...

Копирование содержимого одного файла в другой
Как скопировать содержимое одного файла в другой используя функции CreateFile(), ReadFile() и...

Копирование содержимого одного файла в другой
Всем доброго времени суток. Заранее извиняюсь за глупый вопрос я еще новичок. Вот решаю одну...

Копирование одного текстового файла в другой, используя посимвольное, построчное и поблочное копирование
Здраствуйте, у меня такая проблемма мне надо обеспечить копирование одного текстового файла в...

8
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
14.03.2012, 20:38 2
у вас есть массив аргументов char *argv[], вот его и используйте
C
1
2
    const char *fileNameInput = argv[1];
    const char *fileNameOutput = argv[2];
0
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 12
14.03.2012, 21:31  [ТС] 3
без изменений, программа по-прежнему считывает адреса файлов а дальше с ними ничего не происходит
0
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
14.03.2012, 21:37 4
Цитата Сообщение от typen2007 Посмотреть сообщение
без изменений, программа по-прежнему считывает адреса файлов а дальше с ними ничего не происходит
а что должно с ними происходить? кода не вижу, телепатов нету
0
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 12
14.03.2012, 21:56  [ТС] 5
const char я по-моему тоже пробовал хотя последние 3 дня я попросту подставлял всевозможные команды от безвыходности и от того что немного нуб.
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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
using namespace std;
int _tmain( int argc, char* argv[])
{
   FILE *fp1,*fp2;
const char *fileNameInput = argv[1];
if ((fp1 = fopen(argv[1],"rb"))==NULL)
{printf("Cannot open original file. \n");
exit(1);
}
 
 
if ((fp2 = fopen("2.txt","wb"))==NULL)
{printf("Cannot open copy file. \n");
exit(1);
}
const int size=256;
char mas[size];
size_t read;
while((read = fread(mas,sizeof(char),size,fp1)) != 0)
{
   fwrite(mas,sizeof(char),read,fp2);
 
}
fclose(fp1);
fclose(fp2);
 return 0;
}
а зачем вообще fileNameInput позиционировать здесь как указатель? (с указателями я тоже только разбираюсь)
0
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
14.03.2012, 21:59 6
потому что argv это массив указателей на аргументы командной строки, ну и что не работает? не разбираетесь откройте учебник и разбирайтесь с указателями
0
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 12
14.03.2012, 22:28  [ТС] 7
не работает сама процедура копирования и вставки, я честно говоря не пойму в чем дело я даже провел некий эксперимент, взял исходный код где я прямо в коде имена файлов прописал откомпилил и попытался запустить (Debug) через командную строку, результата никакого, в отличие от того если программу прогнать через среду разработки (VC++ 2008), также я немного покопался на форуме и нашел подобную тему Работа с файлами. Argv
По ходу у него тоже программа считывает argv и дальше ничего не выполняет.
0
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 12
19.03.2012, 17:31  [ТС] 8
Проблема все еще актуальна, помогите пожалуйста
0
5 / 4 / 1
Регистрация: 25.03.2020
Сообщений: 36
01.05.2020, 14:38 9
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
/*копирование содержимого одного файла в другой, с вводом названия копирования
и имени нового файла, через командную строку.*/
 
 
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
 
#define SIZE  512
 
int file_copy(char *inptf, char *otptf)
{
    char   buffer[SIZE]; //буффер для записи
    FILE *fin, *fout; //входящий-исходящий файлы
 
    if((fin = fopen(inptf, "rb")) == NULL)   //обработка ошибки открытия файлов
    {
        fprintf(stderr,"Could not open file.\n");
        return 1;
    }
 
    if((fout = fopen(otptf, "wb")) == NULL)
    {
        fprintf(stderr,"Could not open file.\n");
        return 2;
        fclose(fin);
    }
 
    while((fread(buffer, sizeof(char), SIZE, fin)) > 0)  //чтение копируемого файла до конца
    {
        fwrite(buffer, sizeof(char), SIZE, fout);//запись копии в новый файл
    }
    //закрываем файлы
    fclose(fin); 
    fclose(fout);
    //очищаем буфер
    free(buffer);
    return 0;
}
 
int main(int argc, char **argv)
{
    if (argc != optind + 2)
    {
        fprintf(stderr, "Usage: filter [flag] infile outfile\n");
        return 1;
    }
    
    file_copy(argv[optind],argv[optind + 1]); //файлы вводим через командную строку
}
0
01.05.2020, 14:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2020, 14:38
Помогаю со студенческими работами здесь

Написать программу записи содержимого из одного файла в другой : Тип файла текстовый
#include &quot;StdAfx.h&quot; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include...

Копирование содержимого текставого файла в другой текстовый файл
Исходный текстовый файл содержит просто числа, записанные через пробел. Как переписать содержимое...

Реализовать программу в виде исполняемого файла, запускаемого посредством аргументов командной строки
не могу понять что это означает и как это реализовать: Работа должна быть выполнена в виде 1...

Передать из одного файла в другой текст построчно посредством read() write()
# include &lt;iostream&gt; # include &lt;vector&gt; # include &lt;fstream&gt; # include &lt;string&gt; using...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru