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

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

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

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

03.11.2013, 20:38. Просмотров 344. Ответов 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 байт, обрезая всё после них. А хочется, чтобы размер файла никак нельзя было менять,а запись лишь изменяла содержимое внутри файла. Это возможно??
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 20:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос запись в файл, не изменяя размер самого файла (C++):

Запись в файл через _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
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
03.11.2013, 20:40 #2
Цитата Сообщение от freakz Посмотреть сообщение
блема состоит в том, что при записи в начало этого файла, например, 5 байт, размер файла преобразуется в эти самые 5 байт, обрезая всё после них.
самый простой способ
считать все в буфер, поменять нужное и заново записать
0
freakz
2 / 2 / 0
Регистрация: 25.09.2011
Сообщений: 22
03.11.2013, 20:45  [ТС] #3
Цитата Сообщение от ValeryS Посмотреть сообщение
самый простой способ
считать все в буфер, поменять нужное и заново записать
требуется реализовать файловую систему, в которой такие операции будут очень частыми, а объемы - большие. Думаю, не совсем рациональное решение
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
03.11.2013, 21:03 #4
Цитата Сообщение от freakz Посмотреть сообщение
Думаю, не совсем рациональное решение
не рациональное но самое простое
Файл это не база данных у него последовательный доступ(поток)
поэтому нельзя просто взять и поменять число в произвольном месте
другой путь выглядит так
создаем временный файл
считываем из файла нужное количество информации записываем во временный
записываем нужную информацию
дописываем остаток из оригинального файла
закрываем файлы
переименовыем оригинальный файл
переименовываем временный файл в имя оригинального
удаляем оригинальный(который уже переименован)
все редакторы файлов работают или по первому или по второму пути
можно сделать для малых файлов первый способ, для больших второй

есть еще путь но он очень опасен любая ошибка файл безвратно утерен
открываем файл
смешаемся на нужную позицию
записываем
смещаемся к концу файла
закрываем
учти способ теоретический, я не разу не пробовал
1
freakz
2 / 2 / 0
Регистрация: 25.09.2011
Сообщений: 22
03.11.2013, 21:21  [ТС] #5
теоретический способ в моей реализации не сработал, увы. Просто интересно, как тогда работают виртуальные машины, неужели и там постоянно держат в памяти область жд...
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
03.11.2013, 21:36 #6
Цитата Сообщение от freakz Посмотреть сообщение
Просто интересно, как тогда работают виртуальные машины, неужели и там постоянно держат в памяти область жд...
теоретически да
практически они создают "виртуальный диск" в памяти но этим занимаются дрова,программа думает что она работает с диском
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 21:36
Привет! Вот еще темы с ответами:

Чтение из файла, запись в файл - C++
Тут такая у меня проблема. 1) Не работает цикл в майне. Как его правильно организовать? 2) И, похоже, чтение из файла все-таки,...

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

Запись в файл и чтение из файла - C++
Здравствуйте!!! Как правильно сделать в с++ запись в файл и чтение из файла?? Объясните пожалуйста с примерами??

Запись в файл и чтение из файла - C++
Всем привет. Кто может подсказать решение? Есть полученный заполненный массив. int A. Числа в нём от 0 до 17. Как его записать в файл...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.11.2013, 21:36
Ответ Создать тему
Опции темы

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