Я хочу использовать для хранения файлов особое уникальное расширение. Например .gqv1 для хранения тестов. В таком файле должен содержаться текст и несколько изображений, а ещё точнее массив символов, массив байт и массив ImageIcon.
Пользователь при помощи моего приложения может создать тест определённого формата, написать вопросы, указать цену/сложность каждого вопроса, тест в виде дерева с разветвлениями.
Программа сохранит тест в файле с расширением, например .gqv1, потом тест можно будет запустить и пройти. В файле будут сохраняться результаты, как бы таблица рекордов по прохождению этого теста.
Главный вопрос:
Как создать файл с любым расширением и уникальной кодировкой, и как сделать программу, расшифровывающую эти файлы.
Если нужно дополнительное описание вопроса - спрашивайте, уточню.
Java
Как создать уникальное расширение файла.
Я так понимаю, вопрос должен звучать "как создать собственный формат файла? ".
Ничего сложного. просто придумываешь структуру формата (заголовочную часть, секции, как всё это различать и тд. А затем просто записывает все нужные данные в файл, придерживаясь придуманного формата.
Более лёгкий путь - по сути, то. что ты хочешь, можно сделать, тупо поместив все нужные файлы + файл-описание внутрь zip архива (просто с другим расширением, не zip). Таким образом организован вордовский формат .docx например, можешь открыть любой документ ворда в архиваторе и посмотреть, как он устроен.
Ничего сложного. просто придумываешь структуру формата (заголовочную часть, секции, как всё это различать и тд. А затем просто записывает все нужные данные в файл, придерживаясь придуманного формата.
Более лёгкий путь - по сути, то. что ты хочешь, можно сделать, тупо поместив все нужные файлы + файл-описание внутрь zip архива (просто с другим расширением, не zip). Таким образом организован вордовский формат .docx например, можешь открыть любой документ ворда в архиваторе и посмотреть, как он устроен.
Для начала - продумать формат, в котором всё это будет храниться)
Алекс Суворов
Ну я уже сделал программу, она может создавать тест и работать с ним, но нужно работать не с одним тестом, а сохранять тест в файл и загружать из него.
как насчёт зашифровать поток данных любым популярным криптоалгоритмом?
есть туева хуча библиотек под любой язык
есть туева хуча библиотек под любой язык
Я могу привести пример моего приложения с моим уникальным расширением для файла. Написано на Pascal. Файл olsf ничем не отличается от txt, но olsf открывается только с данного приложения.
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
{$resource 'Open.png'}
{$resource 'Save.png'}
{$mainresource OLS icon.res}
uses System.Windows.Forms, System.Drawing;
const
TextFileExt = 'olsf';
TextFileIcon = 'D:\Documents\IconsFiles\Файл OLS.png';
TextFileFilter = 'OLS Files (*.'+TextFileExt+')|*.'+TextFileExt;
var
myForm: Form;
TextBox1: TextBox;
procedure SaveFile(FileName: string);
begin
//Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного сохранения русских букв
var f := new System.IO.StreamWriter(FileName, false, System.Text.Encoding.Default);
f.Write(TextBox1.Text);
f.Close;
end;
procedure OpenFile(FileName: string);
begin
//Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного чтения русских букв
var f := new System.IO.StreamReader(FileName, System.Text.Encoding.Default);
TextBox1.Text := f.ReadToEnd;
f.Close;
end;
procedure FormClose(sender: object; args: System.EventArgs);
begin
myForm.Close;
end;
procedure MenuSaveClick(sender:object; args:System.EventArgs);
begin
//Диалог для выбора файла
var sd := new SaveFileDialog;
//Расширение поумолчанию
sd.DefaultExt := TextFileExt;
//Фильтр для диалга
sd.Filter := TextFileFilter;
if sd.ShowDialog=DialogResult.OK then
//если результат выполнения sd.ShowDialog это нажатие кнопки подтверждения то
SaveFile(sd.FileName);
end;
procedure MenuOpenClick(sender:object; args:System.EventArgs);
begin
var sd := new OpenFileDialog;
sd.DefaultExt := TextFileExt;
sd.Filter := TextFileFilter;
if sd.ShowDialog = DialogResult.OK then
OpenFile(sd.FileName);
end;
begin
myForm := new Form;
myForm.Text := 'OLS Editor';
myForm.Icon := new Icon('С: \Documents\OrdLeaderScript\Editor\icon.ico');
TextBox1 := new TextBox;
TextBox1.Multiline := True;
TextBox1.Height := 100;
TextBox1.Dock := DockStyle.Fill;
//Полосы прокрутки
TextBox1.ScrollBars := ScrollBars.Both;
//Устанавливаем шрифт
TextBox1.Font := new System.Drawing.Font('Consolas',12);
myForm.Controls.Add(TextBox1);
//Создаем меню
var toolStrip1 := new ToolStrip;
toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden;
var miFile := new ToolStripMenuItem('Файл');
miFile.DropDownItems.Add(new ToolStripMenuItem('Открыть', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick));
miFile.DropDownItems.Add(new ToolStripMenuItem('Сохранить как...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick));
miFile.DropDownItems.Add(new ToolStripMenuItem('Выход',nil,FormClose));
toolStrip1.Items.Add(miFile);
myForm.Controls.Add(toolStrip1);
//Посмотрим в аргументы командной строки
//Если их количество = 1, то открываем
if CommandLineArgs.Length = 1 then
OpenFile(CommandLineArgs[0]);
Application.Run(myForm);
end.
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
{$resource 'Open.png'}
{$resource 'Save.png'}
{$mainresource OLS icon.res}
uses System.Windows.Forms, System.Drawing;
const
TextFileExt = 'olsf';
TextFileIcon = 'D:\Documents\IconsFiles\Файл OLS.png';
TextFileFilter = 'OLS Files (*.'+TextFileExt+')|*.'+TextFileExt;
var
myForm: Form;
TextBox1: TextBox;
procedure SaveFile(FileName: string);
begin
//Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного сохранения русских букв
var f := new System.IO.StreamWriter(FileName, false, System.Text.Encoding.Default);
f.Write(TextBox1.Text);
f.Close;
end;
procedure OpenFile(FileName: string);
begin
//Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного чтения русских букв
var f := new System.IO.StreamReader(FileName, System.Text.Encoding.Default);
TextBox1.Text := f.ReadToEnd;
f.Close;
end;
procedure FormClose(sender: object; args: System.EventArgs);
begin
myForm.Close;
end;
procedure MenuSaveClick(sender:object; args:System.EventArgs);
begin
//Диалог для выбора файла
var sd := new SaveFileDialog;
//Расширение поумолчанию
sd.DefaultExt := TextFileExt;
//Фильтр для диалга
sd.Filter := TextFileFilter;
if sd.ShowDialog=DialogResult.OK then
//если результат выполнения sd.ShowDialog это нажатие кнопки подтверждения то
SaveFile(sd.FileName);
end;
procedure MenuOpenClick(sender:object; args:System.EventArgs);
begin
var sd := new OpenFileDialog;
sd.DefaultExt := TextFileExt;
sd.Filter := TextFileFilter;
if sd.ShowDialog = DialogResult.OK then
OpenFile(sd.FileName);
end;
begin
myForm := new Form;
myForm.Text := 'OLS Editor';
myForm.Icon := new Icon('С: \Documents\OrdLeaderScript\Editor\icon.ico');
TextBox1 := new TextBox;
TextBox1.Multiline := True;
TextBox1.Height := 100;
TextBox1.Dock := DockStyle.Fill;
//Полосы прокрутки
TextBox1.ScrollBars := ScrollBars.Both;
//Устанавливаем шрифт
TextBox1.Font := new System.Drawing.Font('Consolas',12);
myForm.Controls.Add(TextBox1);
//Создаем меню
var toolStrip1 := new ToolStrip;
toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden;
var miFile := new ToolStripMenuItem('Файл');
miFile.DropDownItems.Add(new ToolStripMenuItem('Открыть', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick));
miFile.DropDownItems.Add(new ToolStripMenuItem('Сохранить как...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick));
miFile.DropDownItems.Add(new ToolStripMenuItem('Выход',nil,FormClose));
toolStrip1.Items.Add(miFile);
myForm.Controls.Add(toolStrip1);
//Посмотрим в аргументы командной строки
//Если их количество = 1, то открываем
if CommandLineArgs.Length = 1 then
OpenFile(CommandLineArgs[0]);
Application.Run(myForm);
end.
Алекс Суворов
Спасибо, конечно, но прошло 3 года. У меня уже совсем другого уровня вопросы.
Похожие вопросы
- Пути к файлам в Java, class File...
- Нужна консультация по поводу файлов корневых в игре!
- Изменение строки файла формата class
- Ребят, привет, мне необходимо открыть исполняемый файл Jar, установила java на ноут, т.к. файл открывается как архив
- Не работает запись русских символов в файл
- 2.11 Практическая работа Создайте проект с именем AgeComparator,я зделал небольшой прект можете его пж доработать?
- Как можно запустить строчку java кода которая хранится в txt файле?
- Можно ли создать такую программу?
- Как создать свою вселенную?
- Как создать окна обучения на Джаве в Андроид студио?
Заголовочная часть - это название теста и раздел к которому он относится.
Есть 3 секции:
1. Вопросы и их параметры - массив объектов.
2. Схема теста, хранит ссылки на объекты вопросов, действия при неправильном ответе и правильном.
3. история использования теста, версии теста и таблица рекордов по его прохождению.
Я уже сделал программу, она может создавать тест и работать с ним, но нужно работать не с одним тестом, а сохранять тест в файл и загружать из него.
https://drive.google.com/file/d/1ZM0k90qvQO4DCGlgUxltnnK8QsLqvJtr/view?usp=drivesdk