Запись в файл C ++ - PullRequest
       18

Запись в файл C ++

0 голосов
/ 05 февраля 2012

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

100 msc

Я хочу обновить его как:

100 10 20 34 32 43 44

Поэтому я хочу пропустить 100 и перезаписать msc новым входным массивом.

Ответы [ 3 ]

2 голосов
/ 05 февраля 2012

Лучший способ, который я знаю, - это прочитать полное содержимое файла, а затем использовать некоторые строковые манипуляции для перезаписи того, что вам нужно. Затем вы можете записать измененную информацию в тот же файл, перезаписав его содержимое.

1 голос
/ 05 февраля 2012

Сначала вы должны понять, что вы не можете изменять такие файлы.
Вы можете, но это немного сложнее, чем это (так как вам нужно место).

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

Поскольку вы точно знаете, куда читать и что вставить, сделайте это в первую очередь.

void copyFile(std::string const& filename)
{
    std::ifstream    input(filename.c_str());
    std::ofstream    output("/tmp/tmpname");


    // Read the 100 from the input stream
    int x;
    input >> x;


    // Write the alternative into the output.
    output <<"100 10 20 34 32 43 44 ";

    // Copies everything else from
    // input to the output.
    output << input.rdbuf();
}

int main()
{
    copyFile("Plop");
    rename("Plop", "/tmp/tmpname");
}
0 голосов
/ 05 февраля 2012

Метод ktodisco работает хорошо, но другой вариант - открыть файл с разрешениями на чтение / запись и переместить указатель положения файла в место записи в буфере, а затем просто написать то, что вам нужно.C ++, вероятно, имеет специфику, чтобы сделать это, но сделать это чисто с помощью библиотеки C stdio.Примерно так:

#include <stdio.h>

int main() {
    FILE* f = fopen("myfile", "r+");
    /* skip ahead 4 characters from the beginning of file */
    fseek(f, 4, SEEK_SET);
    /* you could use fwrite, or whater works here... */
    fprintf(f, "Writing data here...");

    fclose(f);
    return 0;
}

Вы можете использовать их как ссылки: - fseek - fwrite

Надеюсь, я помог!

== РЕДАКТИРОВАТЬ ==

В C ++ класс iostream, кажется, способен выполнять все вышеперечисленное.Смотри: iostream

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...