# Native Code > برنامه نویسی با C > برنامه نویسی در محیط QT و هم خانواده هایش >  ذخیره اطلاعات مهم در فایل

## AliRezaBeytari

سلام دوستان.
من در برنامه ای که دارم مینویسم ، باید یه سری اطلاعات بسیار مهم که اصلا نباید لو برو رو درون یه فایل با فرمت اختصاصی خودم ذخیره کنم.
مشکل من اینه که میخوام مثل فایل های DLL که وقتی با Notepad بازشون میکنی ، یه سری کارکترهای نامفهوم نمایش داده میشه ؛ اطلاعات رو ذخیره کنم.
منظورم اینه که نمیخوام به صورت Text باشه که Encode کرده باشه. میخوام مثل فایل های باینری اصلا قابل دیده نباشه.

خیلی ممنونم.

----------


## chikar

> من در برنامه ای که دارم مینویسم ،..


سلام می تونید اطلاعاتتون رو به روش hex یا base64 کد گذاری کنید مثلا
 QTextEdit *tedit = new QTextEdit(this);
 QString file_neme = "c:/ali.txt";

    QFile *myfile = new QFile(file_neme);
    myfile->open(QIODevice::ReadWrite);
   QByteArray c = myfile->readAll();
   QString encoded = QString(c.toBase64());//c.toHex();  
 tedit->setText(QString(encoded));

برای خوندن هم می تونی این جوری بنویسی 
c.fromBase64(),c.fromHex()

----------


## AliRezaBeytari

> سلام می تونید اطلاعاتتون رو به روش hex یا base64 کد گذاری کنید مثلا
>  QTextEdit *tedit = new QTextEdit(this);
>  QString file_neme = "c:/ali.txt";
> 
>     QFile *myfile = new QFile(file_neme);
>     myfile->open(QIODevice::ReadWrite);
>    QByteArray c = myfile->readAll();
>    QString encoded = QString(c.toBase64());//c.toHex();  
>  tedit->setText(QString(encoded));
> ...


دوست عزیز ، من گفتم نمیخوام کاربر بتونه حتی متن Encode شده رو هم ببینه.
مثل میخوام وقتی کاربر اون فایلی که من ذخیره کردم رو با نرم افزار ویرایشگر متنی مثل ++Notepad باز کرد ، اینطوری نمایش داده بشه :



ممنونم.

----------


## returnx

به طور مثال ، شما میتونید به شکل زیر عمل کنید :
#include <QCoreApplication>
#include <QFile>
#include <iostream>
#include <QDataStream>

using namespace std;
struct test_t
{
    int index;
    QString data;
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);


    QFile i_file("D:/saalaam.txt");
    i_file.open(QIODevice::ReadWrite);

    test_t t;
    QDataStream i_stream(&i_file);
    //Read Data:

    if (i_file.isOpen())
    {

        if (i_file.exists())
        {
            while (!i_stream.atEnd())
            {

                i_stream>>t.index>>t.data;
                cout<<t.index<<" "<<t.data.toStdString()<<"\n";
                //i_file.seek(sizeof(t));

            }

        }

        for (int counter = 0; counter < 4; ++counter)
        {
            t.index=counter;
            t.data=QString("x").repeated(counter);
            i_stream<<t.index<<t.data;
        }

    }

    i_file.close();
    return a.exec();
}

----------


## negative60

base64 الگوريتم مناسبی برای رمزنگاری نيست و به سادگی قابل بازگشت هست بهتره برای ذخيره اطلاعات برنامتون از ديتابيس Sqlite استفاده کنيد و برای ديتابيس پسورد مشخص کنيد اگر قرار هست پسورد رو در خود فايل برنامه ذخيره کنيد پسورد رو به وسيله رمزنگاری های مختلف مثل RSA و AES يا بهتر ترکيبی از چند الگوريتم نگهداری کنيد و خود فايل برنامه هم پک کنيد

----------


## AliRezaBeytari

> به طور مثال ، شما میتونید به شکل زیر عمل کنید :
> #include <QCoreApplication>
> #include <QFile>
> #include <iostream>
> #include <QDataStream>
> 
> using namespace std;
> struct test_t
> {
> ...


خب تو این هم که اطلاعات به صورت رشته ای نمایش داده میشه !!!

----------


## returnx

> خب تو این هم که اطلاعات به صورت رشته ای نمایش داده میشه !!!


نه! شما فقط بعضی از مقادیر رشته ای را به این صورت میبینید برای مثال تصویر زیر تصویر محتوای یک فایل اجرایی در ویندوز هست که به صورت ترتیبی باز شده همون طور که در تصویر با رنگ صورتی مشخص شده شما بعضی از مقادیر رشته ای را میتونید ببنید اما اونچیزی که اهمیت داره ، اینکه چون ما دقیقا با structure فایل اجرایی آشنا نیستیم (اینجا از فایل اجرایی به عنوان مثال استفاده شده ، منظور فایل تصادفی است) ، نمیتونیم به راحتی اطلاعات را استخراج کنیم :
r_file.jpg
آنچیزی که در فایل های تصادفی بیشتر مورد توجه است ، ساختار فایل هست به همین دلیل هست که به طور مثال شما به راحتی نمیتوانید از یک فایل با قالب خاصی مثل (PNG) استفاده کنید ، مگر اینکه از ساختار(قالب) فایل با خبر باشید...
باید بگم که به طور مثال اگر شما کد مثال من را نمیدید و فقط فایل در اختیار شما قرار میگرفت ، نمیتونستید به راحتی متوجه ساختار فایل بشید...

----------

