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

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

Войти
Регистрация
Восстановить пароль
 
Даша_93
3 / 3 / 0
Регистрация: 10.06.2012
Сообщений: 31
#1

Файловые потоки данных - C++

10.01.2013, 21:15. Просмотров 340. Ответов 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
#include "stdafx.h"
#include <stdio.h>
#include <fstream>
#include <conio.h>
#include <string.h>
#include <cstdio>
#include "cstdlib"
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
setlocale(LC_ALL,"Russian");
ifstream input("input.txt"); 
ofstream output("output.txt"); 
output << input.rdbuf(); 
fstream fs("input.txt",ios::binary|ios::in|ios::out|ios::trunc);
if(!fs)
{
cerr<<"Ошибка открытия файла."<<endl;
}
else
{
 
}
return 0; 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2013, 21:15     Файловые потоки данных
Посмотрите здесь:

C++ Файловые потоки и функции
Бинарные файловые потоки C++
C++ Файловые потоки
Файловые потоки C++
C++ Бинарные файловые потоки
C++ Решение задач на файловые потоки
C++ Файловые потоки
файловые и строчные потоки (комментарии) C++
файловые потоки C++
Файловые указатели. Потоки C++
Файловые потоки C++
C++ Файловые потоки в Си и С++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
10.01.2013, 22:16     Файловые потоки данных #2
Можно так:
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>
 
 
int main() {
   std::ifstream ifs("input.txt");
   std::ofstream ofs("output.txt");
   
   if (!ifs) {
      std::cerr << "Can't open input.txt for reading" << std::endl;
      return EXIT_FAILURE;
   }
   if (!ofs) {
      std::cerr << "Can't open output.txt for writing" << std::endl;
      return EXIT_FAILURE;
   }
   
   std::vector<std::string> buffer;
   for (std::string line; std::getline(ifs, line); ) {
      buffer.push_back(line);
   }
   while (!buffer.empty()) {
      ofs << buffer.back() << std::endl;
      buffer.pop_back();
   }
}
cadet
115 / 76 / 6
Регистрация: 10.01.2010
Сообщений: 275
10.01.2013, 22:17     Файловые потоки данных #3
Учебник Богатырева. возможно поможет)

7.33. Напишите программу, печатающую строки файла в обратном порядке. Не считывать
файл целиком в память! Следует использовать метод "обратного чтения" либо метод
"быстрого доступа" к строкам файла, описанный в главе "Работа с файлами".


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
/* Инвертирование порядка строк в файле.
     * Используется та идея, что файл-результат имеет тот же
     * размер, что и исходный
     */
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdio.h>
 
    #define BUFS 4096       /* максимальная длина строки */
 
    void main(int argc, char **argv )
    {
            FILE *fp;
            struct stat st;
            long len;
            char buffer[ BUFS+1 ];
            FILE *fpnew;      /* инверсный файл */
            int lgt;
 
            if( argc != 2 ){
                    printf("Error: must be filename\n");
                    exit(1);
            }
            if( (fp= fopen( argv[1], "r" )) == NULL ){
                    printf( "Can not open %s\n", argv[1] );
                    exit(2);
            }
            stat( argv[1], &st );   /* fstat(fileno(fp), &st); */
            len = st.st_size;       /* длина файла в байтах */
 
            if( (fpnew = fopen( "inv.out", "w" ))== NULL ){
                    printf("Can not create file\n");
                    exit(3);
            }
 
            while( fgets( buffer, sizeof buffer, fp ) != NULL ){
                    lgt = strlen( buffer );
                    fseek(fpnew, len - lgt , 0);
                    /* Помните, что смещение у lseek и fseek -
                     * это число типа long, а не int.
                     * Поэтому лучше всегда писать
                     *      lseek(fd, (long) off, whence);
                     */
                    len -= lgt;
                    fprintf( fpnew, "%s", buffer );
                    /* или лучше  fputs(buffer, fpnew); */
            }
            fclose( fp ); fclose( fpnew );
    }
Даша_93
3 / 3 / 0
Регистрация: 10.06.2012
Сообщений: 31
12.01.2013, 06:03  [ТС]     Файловые потоки данных #4
gray_fox, а можете вот эту часть закомментить,пожалуйста?
C++
1
2
3
4
5
6
7
8
std::vector<std::string> buffer;
   for (std::string line; std::getline(ifs, line); ) {
      buffer.push_back(line);
   }
   while (!buffer.empty()) {
      ofs << buffer.back() << std::endl;
      buffer.pop_back();
   }
Yandex
Объявления
12.01.2013, 06:03     Файловые потоки данных
Ответ Создать тему
Опции темы

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