Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
kold2015
1 / 1 / 0
Регистрация: 18.02.2014
Сообщений: 201
1

Запись в начало файла

19.08.2014, 10:13. Просмотров 4281. Ответов 9
Метки нет (Все метки)

Здравствуйте мне нужно записать слово "zashivrovano" в начале каждого файла:
я так понял алгоритм следующий:
1) Создаем новый файл

2) Пишем в него слово Zsdhifrovano

3) Дописать данные из старого файла

4) удалить старый файл

5) Переименовать новый файл в имя старого

Вопрос:

А какой функцией дописывать данные из старого файла в новый?

и вопрос лучше реализовывать с помощью потоков ofstream и ifstream

я так понял файл нужно считать в буфер но если файл большой допустим 2гб?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2014, 10:13
Ответы с готовыми решениями:

Запись в начало файла.
Объясните мне плиз на пальцах, как записать данный в начало файла? То есть чтобы старые данные...

Ofstream запись в начало файла
Всем здрасьте ! Мне нужно с помощью ofstream записать данные в начало файла, а данные записанные...

Запись данных в начало файла
Есть структура. Нужно добавлять данные в бинарный файл в начало. #include "stdafx.h" #include...

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

Увеличить размер файла до заданного, записав в начало файла необходимое количество нулей
Ребят,такая проблема. Помогите. Вот код мой #include <iostream> #include <fstream> #include...

9
A_Kamolins
4 / 4 / 5
Регистрация: 15.08.2014
Сообщений: 30
19.08.2014, 10:57 2
Мне кажется, что можно было просто открыть файл, переставить указатель в начало и оттуда начать запись в файл. Всё старое просто передвинется, а то, что тебе было необходимо записать - окажется в самом начале. Ну, если я не прав, можно просто считать из файла в вектор к примеру, затем перезаписать в него то, что тебе надо, после чего - дозаписать то, что ты считал в вектор.

И - да, думаю тут лучше ifstream, ofstream / fstream
0
kold2015
1 / 1 / 0
Регистрация: 18.02.2014
Сообщений: 201
19.08.2014, 11:04  [ТС] 3
"просто считать из файла в вектор к примеру"

как это делается?
0
A_Kamolins
4 / 4 / 5
Регистрация: 15.08.2014
Сообщений: 30
19.08.2014, 11:24 4
kold2015, вы не пробовали сперва просто дописать эту фразу в начало файла?

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
 
using namespace std;
 
int main() {
    ifstream input("file.txt");
    vector<int> vec;
    copy(istream_iterator<int> (input), istream_iterator<int>(), back_inserter(vec));
    copy(vec.begin(), vec.end(), ostream_iterator<int> (cout, " ") );
}
0
19.08.2014, 11:24
kold2015
1 / 1 / 0
Регистрация: 18.02.2014
Сообщений: 201
19.08.2014, 11:53  [ТС] 5
гуглил везде вроде пишут что нельзя добавит в начало файла
нужно действовать по алгоритму который я написал выше
0
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
19.08.2014, 11:55 6
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
/////////////////////////////////////////////////////////////////////////////////////////
//нужно записать слово "zashivrovano" в начале каждого файла
/////////////////////////////////////////////////////////////////////////////////////////
#include <complex>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
template< class T >
void    file_push_front
        (
            T_str   const   &   filename,
            T       const   &   val
        )
{
    std::fstream        file( filename );
    std::ostringstream  sout;
 
    sout    <<  val
            <<  file.rdbuf();
 
    file.seekp(0);
    file    <<  sout.str();
}
/////////////////////////////////////////////////////////////////////////////////////////
void    print_file( T_str   const   &   filename )
{
    std::ifstream   ifile( filename );
 
    std::cout   <<  ifile.rdbuf()
                <<  std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    const   T_str   FILE_NAME   =   "out.txt";
    std::ofstream   ofile( FILE_NAME );
 
    file_push_front
        (
            FILE_NAME,
            1111111111
        );
 
    file_push_front
        (
            FILE_NAME,
            "aaaaaaaaaa"
        );
 
    file_push_front
        (
            FILE_NAME,
            std::complex<int>( 55, 777 )
        );
 
    file_push_front
        (
            FILE_NAME,
            "zashivrovano"
        );
 
    print_file( FILE_NAME );
 
    system("pause");
}
0
kold2015
1 / 1 / 0
Регистрация: 18.02.2014
Сообщений: 201
20.08.2014, 10:13  [ТС] 7
сделал я через временный файл

Добавлено через 17 часов 16 минут
вот моя реализация

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
void priznakshifr(QString put)  //put-- outFilePath
{
    QMessageBox msg;
    //put ???????? ????
 
    QByteArray ar=put.toLocal8Bit();  //????????? ?????? ??? ????? ? ????????? ?? char
    char *imystarfaila=ar.data();
 
    msg.setText(QString::fromLocal8Bit("??? ????????? ?????  ")+QString::fromLocal8Bit(imystarfaila));
    msg.exec();
 
    QFile file(put);  //?????????? ?????? ??????? ????? ? ?????? //???? ????? ?????????-outfilepath
    qint64 pere=file.size();  // ?????? ?????? ????? ? ??????
    char buf[pere];  // ??????? ?????? ??? ???????? ?????????? ??????? ?????
 
    QString rr=QFileInfo(put).absoluteFilePath();  //?????? ?????? ???? ? ?????
    QString novfail=rr+"1";   //??? ?????? ?????????? ?????  //??? ?????????? ?????
 
    QByteArray br=novfail.toLocal8Bit();   // ????????? ????? ??? ????? ? ????????? ?? char
    char *imynovfaila=br.data();
 
    msg.setText(QString::fromLocal8Bit("??? ?????? ????? ")+QString::fromLocal8Bit(imynovfaila));
    msg.exec();
 
    ofstream f(imynovfaila);   //????????? ????? ????????? ???? (???? ??? ??? ?? ??????? ??? ?????????????)
    f<<"zashivrovano";  // ????? ? ???? ???????? ?????
 
    ifstream g;
    g.open(imystarfaila);   // ????????? ?????? ????
    g.read(buf,pere);  // ?????? ?????? ? ????? ?? ??????? ?????
    f.write(buf,pere);  // ????? ?? ?????? ? ????? ????
 
    file.remove();  //??????? ?????? ????
 
 
    QFile file2(novfail);   // ??????????????? ????? ???? ? ??? ???????
    file2.rename(put);
 
    msg.setText(QString::fromLocal8Bit("??? ????????? ????? ????? ???? ????????")+QFileInfo(file2).absoluteFilePath());
    msg.exec();
 
 
 
    g.close();
    f.close();
только подойдет ли для больших файлов?
0
Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
20.08.2014, 18:25 8
А нельзя просто использовать имя-потока.seekp(кол-во байтов, ios::end)? Смещаем указатель в начало файла с конца, и выводим в него имя-потока << "zashifrovano\n";

Просто так проще получается, нежели приведенные варианты выше, не?
0
kold2015
1 / 1 / 0
Регистрация: 18.02.2014
Сообщений: 201
20.08.2014, 19:39  [ТС] 9
помойму нельзя файл затирается
0
Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
20.08.2014, 19:44 10
kold2015, а почему ты не рассмотрел вариант копирования файла в буфер с помощью get(), вывода требуемого слова и последующим выводом файла?
0
20.08.2014, 19:44
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2014, 19:44

Увеличить размер файла до заданного, записав в начало файла необходимое количество нулей
Здравствуйте! Мне нужно записать э-нты в начало файла. Перечитал несколько статей по ф-циям fseek,...

В начало двоичного файла целого типа дописать нечетные элементы этого файла.
Вот прога для записи четных файлов...в конец Мне нужно в начало....нечетные...помогите разобраться...

Как вернуть указатель файла на начало файла?
Как в следующей программе вернуть указатель в начало файла после цикла while? #include &lt;iostream&gt;...


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

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

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