2010-01-01 3 views
0

Может ли кто-нибудь дать мне несколько советов о хранении большого количества данных в файле?Хранение нескольких данных в файл

Например: Я создаю аудио секвенсор с C++, и я хочу сохранить все имена образцов аудио (пути к файлам), информацию об аудиодорожках в проекте (имя, громкость, приглушение звука, соло, и т. д.) и где образцы помещаются на временной шкале в файл.

Я действительно не знаю, как лучше всего это сделать. Я не хочу использовать для этого 3-х партийную библиотеку, и я начинаю программист на этом языке.

Спасибо!

ответ

1

Если вы хотите сохранить различную информацию в том же файле, есть два популярных способа: поля фиксированной длины и поля с разделителями. В поле фиксированной длины каждая часть хранится в куске такого же размера. Поэтому, если вы хотите сохранить 5 вещей, и сохраните их в 80-символьных блоках, вы можете перейти к офсету 160 в файле, чтобы прочитать третий.

В файлах с разделителями вы помещаете символ (или ряд символов) между каждым фрагментом данных, который может иметь любую длину. Поскольку ваши данные могут сильно различаться по длине, я бы предложил использовать хранилище с разделителями, возможно, с каждой из них на отдельной строке («\ n», напечатанной между ними).

0

Ну ... открыть файл в двоичном режиме, записать данные, закрыть файл.

Или, может быть, вы недостаточно подробно о проблеме?

редактировать> Чтобы читать и писать в файл в двоичном режиме (пример):

#include <fstream> 
#include <iostream> 

std::ofstream FileOut("Toto.txt", std::ios_base::binary); 
int xout = 24; 
FileOut.write(reinterpret_cast<const char*>(&xout), sizeof(int)); 
FileOut.close(); 

std::ifstream FileIn("Toto.txt", std::ios_base::binary); 
int xin; 
FileIn.read(reinterpret_cast<char*>(&xin), sizeof(int)); 
FileIn.close(); 

std::cout << xin << std::endl; 

Теперь, это просто пример, вы будете иметь много корректных хорошие учебники о том, что на Google: http://www.google.com/search?rlz=1C1GGLS_frFR299FR303&sourceid=chrome&ie=UTF-8&q=c%2B%2B+binary+file

+0

Что вы имеете в виду с * открытие файла в двоичном режиме *? – Midas

1

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

+0

Какой SQLite? Я хочу создать собственный формат файла, прочитать и сохранить в нем данные. Например, как программы Audacity, например. – Midas

+0

это встроенный механизм базы данных SQL –

2

Две другие идеи приходят мне на ум:

1) Используйте формат типа XML

2) Используйте формат окна инициализации файла

+0

Я думаю, что я посмотрю файлы INI. Благодарю. – Midas

+0

Проблема заключается в том, что на самом деле это не файл конфигурации для программы. Я действительно хочу создать свой собственный формат файла, который хранит данные, возможно, простым способом, поэтому он доступен для редактирования в «Блокноте», или, например, как профессиональные программы, такие как Photoshop, Cubase ... Я хочу стать очень стандартным с этим. – Midas

+0

Если вам нравятся стандарты, XML - это хороший способ пойти, хотя для правильного использования вам нужно использовать библиотеку XML (генерация/разбор XML-файлов - это рецепт ненужной боли). (Обратите внимание, что просто использование XML обычно недостаточно для форматирования вашего файла другим программным обеспечением). Если вам просто нужно что-то простое, формат простого текста имеет то преимущество, что его легко реализовать (не требуется никаких сторонних библиотек) , и легко проверить правильность при отладке. –

Смежные вопросы