Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Собственное расширение как?


Автор: st4lk3r0k 30.12.2006, 20:12
Народ, давно уже хотел спросить но както руки не доходили... теперь держитесь я дорвался smile
Вообщем задача такая надо создать файлик с собственным расширением, но так чтобы его  NotePad прочесть не смог
и чтобы данные в нём хранились как в БД (База данных). В сети ответа на этот вопрос не нашёл... наверно плохо искал но всёже какие есть для этого решения smile и на затравку ещё 1 вопросик: если возможно то дайте какойнить наипростейший пример ежедневника smile.

Автор: Laprado 30.12.2006, 20:44
Тогда не расширение, а формат. Чтобы блокнот не прочитал так просто используй шифрование с открытым ключом. Если серьезно, то серелизация тебе наверно подойдет. Тут в форуме поищи были примеры.

Код

using System;    
using System.IO;    
using System.Runtime.Serialization.Formatters.Binary;    
[Serializable] //вот ОНО! самое важное!    
public class MyClass //класс, к-й мы будем писать в файл    
{    
    private int i;    
    public string[] Strings;    
     
    public int I //создали проперти    
    {    
  get    
  {    
    return this.i;    
  }    
  set    
  {    
    this.i = value;    
  }    
    }    
     
    public MyClass() //конструктор. :)    
    {    
  this.i=1;    
  Strings = new string[2]{"Hi!","That's all!"};    
  return;    
    }    
}    
public class Test //класс, к-й демонстрирует работу всего этого дела    
{    
    public static void Main()    
    {    
  MyClass objectOfMyClass = new MyClass();    
  objectOfMyClass.I=7; //чтоб не по умолчанию. :)    
  Console.WriteLine("Before writing to file:");    
  Console.WriteLine("I="+objectOfMyClass.I);    
Console.WriteLine("Strings: \""+objectOfMyClass.Strings[0]+"\" \""+objectOfMyClass.Strings[1]+"\"");  //это одна строка - просто не поместилась    
  Console.WriteLine("Writing to file..");    
// запишем объект в файл    
  FileStream stream = File.Create("SomeFile.dat"); //создаем поток    
  BinaryFormatter formatr = new BinaryFormatter(); //создаем форматер для записи/чтения нашего класса. Используется двоичный способ.    
  formatr.Serialize(stream, objectOfMyClass); //это "запись" объекта в файл    
  stream.Close();    
  Console.WriteLine("Done.");    
  Console.WriteLine("Reading from file..");    
// а теперь прочитаем что написали    
  stream = File.OpenRead("SomeFile.dat");    
  MyClass GotClass = (MyClass)formatr.Deserialize(stream); //"чтение " объекта из файла.    
  stream.Close();    
  Console.WriteLine("Done.");    
  Console.WriteLine("Read from file:");    
//показываем что в прочитанном класе    
  Console.WriteLine("I="+GotClass.I);    
  Console.WriteLine("Strings: \""+GotClass.Strings[0]+"\"  \""+GotClass.Strings[1]+"\"");    
  Console.Read();    
    
  return;    
    }    
}




[NonSerialized]    
int j=5;













using System;    
using System.IO;    
using System.Runtime.Serialization.Formatters.Binary;    
............................    
............................    
[Serializable]    
class Mytype    
{    
    public int param1=1;    
    public int param2=2;    
    public Image[] param3=new Image[2];    
     
    public void save()    
    {        
  FileStream fs = new FileStream("data.dat",FileMode.Create);    
  BinaryFormatter bf = new BinaryFormatter();    
  bf.Serialize(fs,this);    
  fs.Close( );       
  return;    
    }    
    
    public Mytype load()    
    {    
  FileStream fs = new FileStream("data.dat",FileMode.Open);    
  BinaryFormatter bf = new BinaryFormatter( );    
  Mytype myobj = (Mytype) bf.Deserialize(fs);    
  fs.Close();    
  return myobj;    
    }    
}    
...................................    
...................................

Mytype d = new Mytype();    
.........................................    
//Загружаем так:    
d=d.load();    
.........................................    
//А сохраняем так:    
d.save();
  

Автор: st4lk3r0k 30.12.2006, 22:17
Laprado, За пример огромный пасб smile 

тока зачем это надо? smile
Код

    ...
    public int param1=1;    
    public int param2=2;    
    public Image[] param3=new Image[2]; 
    ...


Как я понял Сериализация это чтоб файл не прочли люди которые программировать не умеют smile
а что делать с теми кто умеет? smile ведь кто угодно может написать программку для чтения Сериализиранного (вроде правильно smile )
файлика? или я не прав? 

и как быть с файлом типо БД. 

мне надо чтобы значения хранились так:

[Users] // имя таблицы
ID | UserName | Age | Location...

причём у юзера должна быть возможность создавать несколько "таблиц", изменять/удалять добовлять новые поля (UserName| Age...) итд.
как такое реализовать? надо именно файликом чтобы его можно было хотяб на флэшке таскать smile

З.Ы.
Сорри, граматика у меня хромает я ещё в 13 лет из россии уехал smile

Автор: Laprado 30.12.2006, 22:52
Нет, серилизация нужна для сохранения значений всех объектов в классе (переменных и пр.). Прочитать конечно можно, но надо тогда знать все типы переменных и их кол-во, чтобы сделать десерилизацию, только лишь посмотря блокнот. Это далеко не быстро может быть.

Можно сделать через xml-файл. Работать с ним не напрямую, а через DataSet - c ним можно работать, как с обычной базой данных. В XML сама все сохранит. Только прочитать такой файл еще проще будет. Если нужно полная секретность, то шифрование. Примера щас под рукой нет, но тут в форуме это обсуждалось.

Автор: st4lk3r0k 30.12.2006, 23:56
Цитата(Laprado @  30.12.2006,  22:52 Найти цитируемый пост)
Нет, серилизация нужна для сохранения значений всех объектов в классе (переменных и пр.).


Тоесть если я хАчу чтобы программа запоминала значения нужных мне переменных то Сериализация это то что нужно?


Цитата(Laprado @  30.12.2006,  22:52 Найти цитируемый пост)
Можно сделать через xml-файл.


Не, нужна секретность smile я в файл буду записывать места куда дед водку прячет... если бабка доберётся всё, пиши пропало! 
(у меня бабушка крутой хакер  smile )

Добавлено @ 23:57 
А насчёт шифрования я тут ещё покопаюсь smile если вдруг пример подвернётся скинь плиз.

Автор: Laprado 31.12.2006, 00:19
Цитата

Тоесть если я хАчу чтобы программа запоминала значения нужных мне переменных то Сериализация это то что нужно?


Да.

Вот с шифрованием нужно аккуратнее, если реализация будет никакой, то бабка твоя узнает еще больше про деда и даже сможет сама говорить ему на подсознательном уровне, куда прятать бутылки. Это я к тому, что можно раскрыть код, узнать как что работает и написать дешифровщик или встроить в исходную программу черный ход. Страшно да? smile Еще страшнее будет, когда рефлектором прогу откроют, как банку консервную и вывалят все содержимое smile 

Вот ссылка на открывашку - рефлектор: http://www.aisto.com/roeder/dotnet 

Но и от него можно защититься, есть программы, которые код до неузнаваемости изменяют. Тут в форуме в теме про http://forum.vingrad.ru/topic-12873.html приложений .NET обсуждалось. Сам пока еще не пользовался.

Автор: st4lk3r0k 31.12.2006, 00:54
...Бедный дедуФка smile 

Цитата(Laprado @  31.12.2006,  00:19 Найти цитируемый пост)
Еще страшнее будет, когда рефлектором прогу откроют, как банку консервную и вывалят все содержимое  

А если я проект откомпилирую не как консервную банку а как скажем... канистру smile тут рефлектор зубы и обломает smile

а если серьёзно то некоторые и получив код на томже ПХП не могут понять как там и что smile
ведь тотже VBulletun (forum) нормально занулить могут не многие smile

Вообщем для ежедневника и простого шифрования хватит smile 

Да кстати рас уш мы всётаки ушли на тему безопастности то сразу спрошу реальноли 
Цитата(Laprado @  31.12.2006,  00:19 Найти цитируемый пост)
 есть программы, которые код до неузнаваемости изменяют

на C# написать такую программу ? smile это так... для справки о возможностях языка smile 

а по безопастности вопрос такой:
Как она вообще реализуется в софте?
Где можно почитать о "правильном кодинге"?
Раньше я кодал на ПХП тоесть и представление о безопасности оттудаже smile какие тут отличия?

..............................................................
и всётаки нафига эти 
Код

    ...
    public int param1=1;    
    public int param2=2;    
    public Image[] param3=new Image[2]; 
    ...


строки (взято из примера smile )

Добавлено @ 00:55 
...чёто я со смайликами разошёлся...  smile 

Автор: Exception 31.12.2006, 15:45
Цитата(st4lk3r0k @  31.12.2006,  01:54 Найти цитируемый пост)
и всётаки нафига эти 
Код

    public int param1=1;    
    public int param2=2;    
    public Image[] param3=new Image[2]; 
    ...


строки (взято из примера)


Так не пустой же класс мы сериализуем smile . Это просто какие-то данные, которые восстанавливаются из файла после десериализации.

Автор: st4lk3r0k 1.1.2007, 01:19
Exception, ппасиб! !  С новым годом!!! (ну это для всех)
 smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)