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

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

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

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

03.11.2013, 20:38. Просмотров 342. Ответов 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     запись в файл, не изменяя размер самого файла
Посмотрите здесь:

Запись в файл через _write, откуда берется размер? - C++
Народ, решил создать отдельную тему, нигде не нашел, по моему мнению -это вообще бред, но он есть 0_о Тема следующая, есть двумерный...

Дан файл целых чисел с элементами A(i), i = 0, ., N–1 (N — размер файла) (упростить\улчшить код) - C++
Дан файл целых чисел с элементами A(i), i = 0, ..., N–1 (N — размер файла). Заменить исходное расположение его элементов на следующее:...

Запись из файла в файл - C++
Доброго времени суток, форумчане. Начал относительно недавно пробовать писать программы, и возникла проблемка в следующей программе, в...

Найти размер самого длинного слова в строке. - C++
Строка состоит из нескольких слов, разделенных одним или несколькими пробелами.

Определить размер самого длинного слова в строке - C++
hi. есть участок кода, который должен находить размер самого длинного слова в строке, но нет. int main() { int...

Написать программу, которая получает данные из файла, изменяя их любым образом - C++
Всем доброго времени суток. Очень прошу разобраться с заданием. Напишите программу, которая получает данные из файла, изменяет их (любым...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
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
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
03.11.2013, 21:03     запись в файл, не изменяя размер самого файла #4
Цитата Сообщение от freakz Посмотреть сообщение
Думаю, не совсем рациональное решение
не рациональное но самое простое
Файл это не база данных у него последовательный доступ(поток)
поэтому нельзя просто взять и поменять число в произвольном месте
другой путь выглядит так
создаем временный файл
считываем из файла нужное количество информации записываем во временный
записываем нужную информацию
дописываем остаток из оригинального файла
закрываем файлы
переименовыем оригинальный файл
переименовываем временный файл в имя оригинального
удаляем оригинальный(который уже переименован)
все редакторы файлов работают или по первому или по второму пути
можно сделать для малых файлов первый способ, для больших второй

есть еще путь но он очень опасен любая ошибка файл безвратно утерен
открываем файл
смешаемся на нужную позицию
записываем
смещаемся к концу файла
закрываем
учти способ теоретический, я не разу не пробовал
freakz
2 / 2 / 0
Регистрация: 25.09.2011
Сообщений: 22
03.11.2013, 21:21  [ТС]     запись в файл, не изменяя размер самого файла #5
теоретический способ в моей реализации не сработал, увы. Просто интересно, как тогда работают виртуальные машины, неужели и там постоянно держат в памяти область жд...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 21:36     запись в файл, не изменяя размер самого файла
Еще ссылки по теме:

Запись в файл, чтение из файла - C++
Каким образом можно реализовать чтение из файла только 1 строки,используя ifstream и fstream,если можно то темку про это из интернета,сам...

Чтение из файла и запись в файл - C++
Доброго времени суток. Идея в чем: Пример входных данных из файла: 5 o 3 c 4 o 5 c 6 o 7

Запись в файл, чтение из файла - C++
В общем, неделю назад мне помогли на этом форуме сделать программу. И все прекрасно работает на visual studio, но в универе у нас везде...

Чтение из файла и запись в файл - C++
Создайте текстовый файл целых чисел (значения вводятся с клавиатуры). Проанализировав в программе созданный файл, создайте еще 2 файла: ...


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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
03.11.2013, 21:36     запись в файл, не изменяя размер самого файла #6
Цитата Сообщение от freakz Посмотреть сообщение
Просто интересно, как тогда работают виртуальные машины, неужели и там постоянно держат в памяти область жд...
теоретически да
практически они создают "виртуальный диск" в памяти но этим занимаются дрова,программа думает что она работает с диском
Yandex
Объявления
03.11.2013, 21:36     запись в файл, не изменяя размер самого файла
Ответ Создать тему
Опции темы

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