0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 15
1

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

28.11.2012, 01:26. Показов 4769. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа копирует этот файл три раза. В первый раз одна использует буфер стандартного размера, затем увеличивает размер буфера в десять раз, и, наконец, копирует файл без использования механизма буферизации. Каждый раз программа измеряет продолжительность копирования файла с помощью функции clock().

Не могу понять. Программа все время выдает сообщение: "Введите имя входного файла!".
Помогите, где мне надо ввести имена файлов, чтобы программа нормально заработала?

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void filecpy(FILE *stream_from, FILE *stream_to);
 
// Буфера для файлов
 
char buf1[BUFSIZ * 10];
char buf2[BUFSIZ * 10];
 
void main(int argc, char *argv[]) {
 
         time_t start, end;
         FILE *stream_from, *stream_to;
 
 
         if(argc < 3) {
                  printf("Задайте имена файлов!\n");
                  exit(-1);
         }
 
// Открываем файлы и используем для копирования
// буфер стандартного размера
 
         if((stream_from = fopen(argv[1], "rt")) == NULL) {
                  printf("Задайте имя входного файла!\n");
                  exit(-1);
         }
         stream_to = fopen(argv[2], "wt+");
 
// Определяем время начала копирования
 
         start = clock();
 
// Выполняем копирование файла
 
         filecpy(stream_from,stream_to);
 
// Определяем время завершения копирования
 
         end = clock();
 
// Выводим время копирования при использовании
// буферов стандартного размера
 
         printf("Время копирования: %5.1f Размер буфера, байтов: %d\n",
                 ((float)end - start) / CLK_TCK, BUFSIZ);
 
 
// Задаем свой буфер большего размера
 
         if((stream_from = fopen(argv[1], "rt")) == NULL) exit(-1);
         stream_to = fopen(argv[2], "wt+");
 
// Устанавливаем буфера как для входного,
// так и для выходного файлов
 
         setvbuf(stream_from, buf1, _IOFBF, sizeof(buf1));
         setvbuf(stream_to,   buf2, _IOFBF, sizeof(buf2));
 
// Копируем файл и измеряем продолжительность
// копирования
 
         start = clock();
         filecpy(stream_from,stream_to);
         end = clock();
 
         printf("Время копирования: %5.1f Размер буфера: %d\n",
                 ((float)end - start) / CLK_TCK, BUFSIZ * 10);
 
// Копируем без использования буферизации
 
         if((stream_from = fopen(argv[1], "rt")) == NULL) exit(-1);
         stream_to = fopen(argv[2], "wt+");
 
         setvbuf(stream_from, NULL, _IONBF, 0);
         setvbuf(stream_to,   NULL, _IONBF, 0);
 
         start = clock();
         filecpy(stream_from,stream_to);
         end = clock();
 
         printf("Время копирования: %5.1f Буферизация не используется\n",
                 ((float)end - start) / CLK_TCK);
 
         exit(0);
}
 
// Функция для копирования файлов
 
void filecpy(FILE *stream_from, FILE *stream_to) {
 
         char linebuf[256];
 
// Цикл копирования. Условие выхода из цикла -
// конец входного файла
 
         while(!feof(stream_from)) {
 
// Читаем в буфер linebuf одну строку
 
                  if(fgets(linebuf, 255, stream_from) == NULL) break;
 
// Записываем содержимое буфера linebuf
// в выходной файл
 
                  if(fputs(linebuf, stream_to) != 0) break;
         }
 
// Закрываем входной и выходной файлы
 
         fclose(stream_from);
         fclose(stream_to);
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2012, 01:26
Ответы с готовыми решениями:

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

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

Проверка содержимого текстового файла
Помоги проверить содержимое файла на числа !Сделал вот как я думаюbool lch(string FN) { ...

Отправка содержимого текстового файла на почту
Добрый вечер. Есть код сендера: IdSMTP1-&gt;AuthenticationType=atLogin; ...

4
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.11.2012, 03:17 2
Цитата Сообщение от Gourhal Посмотреть сообщение
Помогите, где мне надо ввести имена файлов, чтобы программа нормально заработала?
В командной строке.
Миниатюры
Копирование содержимого текстового файла  
1
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 15
28.11.2012, 11:53  [ТС] 3
Цитата Сообщение от alsav22 Посмотреть сообщение
В командной строке.
спасибо!

Еще такое:
Я отредактировал программу, чтобы она так же нормально запускалась в компиляторе и уже с введенными названиями файлов прямо в код. Вопрос такой: как мне сделать, чтобы оно копировало весь текстовый файл, а не только одну строку?

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
 
void filecpy(FILE  *stream_from, FILE *stream_to);
 
// Буферы для файлов
char buf1[BUFSIZ * 10];
char buf2[BUFSIZ * 10];
 
int main()
{clrscr();
  time_t start, end;
  FILE  *stream_from, *stream_to;
 
  // Открываем файлы и используем для копирования
  // буфер стандартного размера
  if((stream_from = fopen ("test.txt", "rt")) == NULL)
  {
    return(-1);
  }
 
  stream_to = fopen ("primer.txt", "wt+");
 
  // Определяем время начала копирования
  start = clock();
 
  // Выполняем копирование файла
  filecpy(stream_from,stream_to);
 
  // Определяем время завершения копирования
  end = clock();
 
  // Выводим время копирования при использовании
  // буферов стандартного размера
  printf("Время копирования: %5.1f "
    "Размер буфера, байтов: %d\n",
    ((float)end - start) / CLK_TCK, BUFSIZ);
 
  // Задаем свой буфер большего размера
  if((stream_from = fopen ("test.txt", "rt")) == NULL)
    return(-1);
 
  stream_to = fopen ("primer1.txt", "wt+");
 
  // Устанавливаем буферы как для входного,
  // так и для выходного файлов
  setvbuf (stream_from, buf1, _IOFBF , sizeof(buf1));
  setvbuf (stream_to,   buf2, _IOFBF , sizeof(buf2));
 
  // Копируем файл и измеряем продолжительность
  // копирования
  start = clock();
  filecpy(stream_from,stream_to);
  end = clock();
 
  printf("Время копирования: %5.1f "
    "Размер буфера: %d\n",
    ((float)end - start) / CLK_TCK, BUFSIZ * 10);
 
  // Копируем без использования буферизации
  if((stream_from = fopen ("test.txt", "rt")) == NULL)
    return(-1);
 
  stream_to = fopen ("primer2.txt", "wt+");
  setvbuf (stream_from, NULL, _IONBF , 0);
  setvbuf (stream_to,   NULL, _IONBF , 0);
 
  start = clock();
  filecpy(stream_from,stream_to);
  end = clock();
 
  printf("Время копирования: %5.1f "
    "Буферизация  не используется\n",
    ((float)end - start) / CLK_TCK);
  getch();
  return(0);
}
 
// Функция для копирования файлов
void filecpy(FILE  *stream_from, FILE *stream_to)
{
  char linebuf[256];
 
  // Цикл копирования. Условие выхода из цикла -
  // достижение кнеца входного файла
  while(!feof(stream_from))
  {
    // Читаем в буфер linebuf одну строку
    if(fgets (linebuf, 255, stream_from) == NULL)
      break;
 
    // Записываем содержимое буфера linebuf
    // в выходной файл
    if(fputs (linebuf, stream_to) != 0)
      break;
  }
 
  // Закрываем входной и выходной файлы
  fclose (stream_from);
  fclose (stream_to);
}
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.11.2012, 18:10 4
Цитата Сообщение от Gourhal Посмотреть сообщение
как мне сделать, чтобы оно копировало весь текстовый файл, а не только одну строку?
В другой файл? У меня весь файл по строкам копирует.

Добавлено через 11 минут
Среда какая? Вот это правильно будет так написать:
C++
1
2
if(fputs (linebuf, stream_to) < 0)
         break;
Потому что fputs():
On success, a non-negative value is returned.
1
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 15
28.11.2012, 19:11  [ТС] 5
Цитата Сообщение от alsav22 Посмотреть сообщение
В другой файл? У меня весь файл по строкам копирует.

Добавлено через 11 минут
Среда какая? Вот это правильно будет так написать:
C++
1
2
if(fputs (linebuf, stream_to) < 0)
         break;
Потому что fputs():
спасибо! вот так копирует весь файл

Borland c 3.1
0
28.11.2012, 19:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2012, 19:11
Помогаю со студенческими работами здесь

Вывод содержимого текстового файла на экран
Нужно написать программу чтоб выводила содержимое текстового файла на экран, желательно по строчно...

Считывание текстового содержимого exe файла
Программа считывает содержимое txt файлов, но отказывается считывать содержимое exe(выводит MZ?),...

Функция: вывод содержимого текстового файла на экран
Привет всем!На уроке проходили тему &quot;ИСПОЛЬЗОВАНИЕ ФАЙЛОВОЙ СИСТЕМЫ&quot;,я чото неразобрал что идет к...

Перевод содержимого текстового файла в верхний регистр
Собственно вопрос в шапке. Как перевести всё содержимое текстового файла в верхний регистр?...


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

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

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