#c
Вопрос:
Как я мог бы создать собственное расширение файла, которое работает на raspberry pi с C ? Я хотел бы создать расширение файла, которое хранит информацию для пользовательской ОС для мобильных устройств, таких как телефоны и планшеты. каков был бы правильный способ кодирования расширения для этого? информация, например, имена, DOB, может быть, их контакты?, и в основном все, что на телефоне, идентификатор которого необходимо хранить постоянно. как бы я это сделал?
Комментарии:
1. Расширение файла не имеет отношения к c . Некоторые ОС связывают расширение с приложением (по умолчанию), чтобы открыть их.
2. Расширение файла на самом деле ничего не значит, это просто часть имени файла. Вы можете создать файл любым удобным вам способом, скажем, XML или JSON. Однако как вы хотите, чтобы файл использовался? Вы хотите, чтобы кто-то мог дважды щелкнуть по нему на своем рабочем столе, и он откроется в вашей программе? Это вопрос установки правильных настроек в Windows/Linux/что угодно.
3. Я понимаю, что вы ищете способ определить свой собственный тип MIME. Вам следует взглянуть на freedesktop.org/wiki/Specifications
4. @Calebisnotagoodcoder у вашего вопроса есть два значения: 1. вы хотите каким-то образом связать файл с кодом C 2. вы хотите создать файл определенного типа для ваших данных, например mydata.raspberry, в котором вы найдете контактные данные людей. Не могли бы вы уточнить, какой из них это?
Ответ №1:
Расширения файлов на самом деле ничего не значат, это просто часть имени файла. Это помогает указать операционной системе, какую программу запускать с данным файлом. Таким образом, создать расширение файла довольно просто, вы просто записываете свои данные в файл. Вот отличный пример того, как это делается на C
После того, как у вас будет свой двоичный файл, который вы можете так же легко прочитать, я процитирую несколько строк с этого сайта
Объект потока файлов можно открыть одним из двух способов. Во-первых, вы можете указать имя файла вместе с параметром режима ввода-вывода конструктору при объявлении объекта:
ifstream myFile ("data.bin", ios::in | ios::binary);
В качестве альтернативы, после объявления объекта файлового потока можно вызвать его метод open:
ofstream myFile;
...
myFile.open ("data2.bin", ios::out | ios::binary);
Любой подход будет работать с объектом ifstream, ofstream или fstream.
Обычно при работе с текстовыми файлами опускается второй параметр (параметр режима ввода-вывода). Однако для того, чтобы манипулировать двоичными файлами, вы всегда должны указывать режим ввода-вывода, включая ios::binary в качестве одного из флагов режима. Для доступа к файлу для чтения/записи используйте fstream:
fstream myFile;
myFile.open ("data3.bin", ios::in | ios::out | ios::binary);
Для чтения из объекта fstream или ifstream используйте метод read. Этот метод принимает два параметра:
istreamamp; read(char*, int);
Функция-член read извлекает заданное количество байтов из данного потока, помещая их в память, на которую указывает первый параметр. Вы несете ответственность за создание и управление памятью, в которую read поместит свой результат, а также за обеспечение того, чтобы она была достаточно большой для хранения запрошенного количества байтов. Байты, которые считываются и не интерпретируются, метод ничего не предполагает об окончаниях строк, и метод чтения не помещает нулевой терминатор в конце считываемых байтов.
Если при чтении возникает ошибка (например, если вы считываете конец файла), поток переводится в состояние ошибки. Если это произойдет, вы можете использовать метод gcount, чтобы узнать количество фактически прочитанных символов, и использовать метод clear для сброса потока в пригодное для использования состояние. Как только поток перейдет в состояние ошибки, все будущие операции чтения завершатся неудачей.
Пример:
#include <fstream.h>
...
char buffer[100];
ifstream myFile ("data.bin", ios::in | ios::binary);
myFile.read (buffer, 100);
if (!myFile) {
// An error occurred!
// myFile.gcount() returns the number of bytes read.
// calling myFile.clear() will reset the stream state
// so it is usable again.
}
...
if (!myFile.read (buffer, 100)) {
// Same effect as above
}