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

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

Войти
Регистрация
Восстановить пароль
 
freakz
2 / 2 / 0
Регистрация: 25.09.2011
Сообщений: 22
#1

запись в файл, не изменяя размер самого файла - C++

03.11.2013, 20:38. Просмотров 334. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
int stream::write(block blocks[], int numOfBlocks,const char *data){
    int filesize=strlen(data);
    ofstream disk("data.dat",ios::out | ios::binary); //Открываем файл в двоичном режиме для записи
    for(int i=0;i<numOfBlocks;++i)
    {
        disk.seekp(blocks[i].start);
        disk.write((char*)data,filesize); //Записываем в файл данные data
    }
    disk.close(); //Закрываем файл 
    return 1;
}
В листинге производится запись в файл блока данных. По условию задачи файл предполагается постоянного размера, например 10мб, и необходимо реализовать в нем чтение и запись. Проблема состоит в том, что при записи в начало этого файла, например, 5 байт, размер файла преобразуется в эти самые 5 байт, обрезая всё после них. А хочется, чтобы размер файла никак нельзя было менять,а запись лишь изменяла содержимое внутри файла. Это возможно??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 20:38     запись в файл, не изменяя размер самого файла
Посмотрите здесь:

Чтение из файла, запись в файл C++
Найти размер самого длинного слова в строке. C++
запись в файл и чтение из файла C++
Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) C++
Запись в файл через _write, откуда берется размер? C++
Запись в файл, чтение из файла C++
Чтение из файла/Запись в файл C++
C++ Чтение из файла и запись в файл
Определить размер самого длинного слова в строке C++
Чтение из файла и запись в файл C++
Запись из файла в файл C++
C++ Написать программу, которая получает данные из файла, изменяя их любым образом

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,298
03.11.2013, 20:40     запись в файл, не изменяя размер самого файла #2
Цитата Сообщение от freakz Посмотреть сообщение
блема состоит в том, что при записи в начало этого файла, например, 5 байт, размер файла преобразуется в эти самые 5 байт, обрезая всё после них.
самый простой способ
считать все в буфер, поменять нужное и заново записать
freakz
2 / 2 / 0
Регистрация: 25.09.2011
Сообщений: 22
03.11.2013, 20:45  [ТС]     запись в файл, не изменяя размер самого файла #3
Цитата Сообщение от ValeryS Посмотреть сообщение
самый простой способ
считать все в буфер, поменять нужное и заново записать
требуется реализовать файловую систему, в которой такие операции будут очень частыми, а объемы - большие. Думаю, не совсем рациональное решение
ValeryS
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,298
03.11.2013, 21:03     запись в файл, не изменяя размер самого файла #4
Цитата Сообщение от freakz Посмотреть сообщение
Думаю, не совсем рациональное решение
не рациональное но самое простое
Файл это не база данных у него последовательный доступ(поток)
поэтому нельзя просто взять и поменять число в произвольном месте
другой путь выглядит так
создаем временный файл
считываем из файла нужное количество информации записываем во временный
записываем нужную информацию
дописываем остаток из оригинального файла
закрываем файлы
переименовыем оригинальный файл
переименовываем временный файл в имя оригинального
удаляем оригинальный(который уже переименован)
все редакторы файлов работают или по первому или по второму пути
можно сделать для малых файлов первый способ, для больших второй

есть еще путь но он очень опасен любая ошибка файл безвратно утерен
открываем файл
смешаемся на нужную позицию
записываем
смещаемся к концу файла
закрываем
учти способ теоретический, я не разу не пробовал
freakz
2 / 2 / 0
Регистрация: 25.09.2011
Сообщений: 22
03.11.2013, 21:21  [ТС]     запись в файл, не изменяя размер самого файла #5
теоретический способ в моей реализации не сработал, увы. Просто интересно, как тогда работают виртуальные машины, неужели и там постоянно держат в памяти область жд...
ValeryS
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,298
03.11.2013, 21:36     запись в файл, не изменяя размер самого файла #6
Цитата Сообщение от freakz Посмотреть сообщение
Просто интересно, как тогда работают виртуальные машины, неужели и там постоянно держат в памяти область жд...
теоретически да
практически они создают "виртуальный диск" в памяти но этим занимаются дрова,программа думает что она работает с диском
Yandex
Объявления
03.11.2013, 21:36     запись в файл, не изменяя размер самого файла
Ответ Создать тему
Опции темы

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