PDA

View Full Version : نحوه ی ذخیره ی داده هایی که در برنامه نوشته شده ی ما به وجود آمد(؟)



hosseinam1370
پنج شنبه 03 اردیبهشت 1394, 14:12 عصر
دوستان ،
شما فرض کنید که من با سی شارپ یا کیوت اومدم یه برنامه ای ساختم مثله ورد ، و کاربری که از برنامه من استفاده میکنه ، قصد داره که نوشته هاشو ذخیره کنه تا بعد باز کنه.،

حالا برا من گنگه که میخام این برنامه ای که بنویسم ، چطور بیاد این دیتاهای کاربر رو ذخیره کنه؟!!

از چه تابعی باید استفاده کنم؟ اصلا روش کار به چه صورت هست؟

حالا شاید برنامه ی من ویرایش عکس باشه، اصلا هرچی دیگه.

لطف کنید یه توضیح بدید ، اصلا نمیدونم دنبال چی باید باشم.

با تشکر.

one hacker alone
پنج شنبه 03 اردیبهشت 1394, 16:42 عصر
سلام
خب دوست عزیز اینکه واضحه شما باید از توابع کار با فایل استفاده کنید
حالا اینکه ماهیت برنامه ی شما داده های معمولی هست و امنیت در اون مهم نیست یا مهم هست قضیه فرق میکنه مثلا شما یه برنامه ی ویرایشگر بنویسید
مثل notepad خد با توجه به وجود توابع کار با فایل میتونید داده های داخل برنامه روو داخل فایل ذخیره کنید و وقتی کاربرخواست باز کنید
یا میتونید رمزنگاری کنید که فقط خود برنامه باز کنه
یا در ویروایشگرهای صدا و تصویر و... هم به همین شکل میتونید ساختار فایل رو با الگوریتمی که شما تعیین میکنید علامتگذاری کنید مثلا بگید از این نقطه تا این نقطه کاربر خط سیاه کشیده تا کاربر پروژه رو باز کرد دوباره ادامه ی کار ویرایشش رو انجام بده
در کل یه چیز مشخصیه همش کار با فایل هست نمیدونم مشکلتون کجاس

hosseinam1370
پنج شنبه 03 اردیبهشت 1394, 17:13 عصر
یعنی تمامی فیلم ها و عکس ها و آهنگ ها و همه و همه ، همین کار با فایل ها هستند؟
من تو سی که با توابع فایل ها کار میکردم ، فقط رو داده های استرینگ ، عملیات انجام میداد.

پس با این حال من فقط باید کار با فایل ها رو بدونم!!
این فایل ها توابع زیادی نداره.


راستش خودمم الان یکم سردرگم شدم ، وقتی وارد کیوت شدم ، نمیدونم توابعی که تو سی++ کار کردم و چطوری ربطش بدم به کیوت. مثله استک یا صف یا استرینگ یا وکتور یا همین فایل ها،

من تو کیوت میتونم فقط شکل ظاهری طراحی کنم و با connect یه چند رخداد ساده رو به دکمه ها یا لاین ادیت ها ربط بدم.


با تشکر.

raminlich
پنج شنبه 03 اردیبهشت 1394, 20:17 عصر
تا او جایی که من می دونم و توی آموزش های آقای اسد زاده یک برنامه بود( یک دانلودر ساده) که یک عکس یعنی لوگو رو از سایت Qt دانلود می کرد و برای ذخیره سازیش هم از کلاس QFile استفاده کرده
البته این چیزیه که من یکم از کداش فهمیدم ولی فکر می کنم همین باشه.
در رابطه با سردرگمی تون هم برین آموزش های آقای اسد زاده رو نگاه کنید می فهمید که تمام کلاس ها و توابعی که تو C++‎‎‎‎‎‎‎‎‎‎‎‎ یاد گرفتین معادل همون یا بهتر موجوده دو نکته هم بگم.
1: Qt رو یک زبون جدا فرض نکن Qt یک فریم ورکه
2: می تونی برنامه هاتو هاتو مخلوطی از تابع های استاندارد C++‎‎‎‎‎‎‎‎‎‎‎‎ و Qt بنویسی البته ممکنه به مشکل بر بخوری اولاش چون بعضی از کلاس های پارامتری که بر میگردونن فرق می کنه مثله QString و string که ار این جور مواقع باید یه سری تبدیل های کوچیک انجام بدی. :لبخند:
در این توضیحات اگر اشتباهی کردم از دیگران خواهشمند هستم صحیح کنید اشتباه رو. :لبخندساده:
موفق باشی

*******
یک شنبه 06 اردیبهشت 1394, 14:50 عصر
#include <stdio.h>
#include <string.h>

#define MAXSIZE 0x400

int main()
{
char buffer[MAXSIZE];

memset (buffer, '\0', MAXSIZE); /*zeroing out the buffer*/

strcpy (buffer, "97.10");

FILE *f=fopen ("C:\\File(8700).txt", "w"); /*creating a file named "File(8700)" with a .txt extension*/
fprintf (f, "%%%s\n", buffer); /*writing data to that file*/
fclose (f); /*closing that file*/

memset (buffer, '\0', MAXSIZE);

f=fopen ("C:\\File(8700).txt", "r"); /*reading data from a file named "File(8700)" with a .txt extension*/
fgets (buffer, MAXSIZE-0x1, f); /*reading data from that file*/
fclose (f); /*closing that file*/

strcpy (memset (buffer, '\0', MAXSIZE), "98.66");

f=fopen ("C:\\File(8700).txt", "a"); /*appending to a file named "File(8700)" with a .txt extension*/
fprintf (f, "%%%s\n", buffer);
fclose (f);

memset (buffer, '\0', MAXSIZE);

int i, c;

f=fopen ("C:\\File(8700).txt", "r");
for (i=0x0; (c=fgetc (f) )!=EOF; ++i)
buffer[i]=c;
fclose (f);

puts (buffer);

return (0);
}

chikar
یک شنبه 06 اردیبهشت 1394, 15:24 عصر
به نظرم خیلی سوال خوبی پرسیدید، ولی جواب هایی که دوستان دادند من رو قانع نکرد
البته این سوال خود من هم هست
فکر می کنم، صرفا دونستن توابع کار با فایل ها کافی نباشه، مثلا در بحث عکس شما باید پیکسل و رنگ رو بشناسید، تو صدا و فیلم باید بدونید فریم چی هست و ... یعنی می خوام بگم باید اول انواع فایل رو به خوبی بشناسید، بعد روشون برنامه نویسی کنید
متاسفانه من که آموزش خوبی تا به حال ندیدم.
بهتر بگم کلا مباحثی که راجع به فایل ها شده، در مورد داده های متنی هست و اینکه بیاد توضیح بده بابا اصلا داخل یه فایل عکس یا فیلم چه نوع کدی قرار گرفته و برای ساخت مثلا یه عکس از صفر چی کار باید کرد و از کجا باید شروع کرد کمتر هست
حالا اگر دوستان کسی تجربه این چنینی داره، لطف کنه در اختیار بقیه بگذاره / مرسی

rahnema1
یک شنبه 06 اردیبهشت 1394, 16:04 عصر
سلام
همین طور که اشاره شده فرمتهای شناخته شده عکس و یا مثلا صدا براشون کتابخانه هایی جهت خواندن و نوشتن این فرمتها ایجاد شده . مثلا معمولا در فرمتهای تصویری در ابتدای تصویر مشخصات تصویر مثل طول و عرض و نحوه فشرده سازی و... سایر مسائل دیگه میاد که بهش هدر عکس میگن و سپس محتوای تصویر میاد فایلهای صوتی هم تقریبا چیزی مشابه این. بنابراین لازم نیست که ما بخواهیم تابعهایی را جهت خواندن و نوشتن اینها ایجاد کنیم و از کتابخانه ها آماده استفاده می کنیم
در مورد فایل ورد هم اساس اون یک نوع ساختار سلسله مراتبی بر اساس تگ های xml هست
درباره مشخصات فرمت فایلهاهم منابع تا دلتون بخواد از متن و سورس کد و .. زیاد هست مثلا شما در ویکی پدیا درباره فرمت bmp میتونید مشخصاتش را ببینید یا فرمت jpeg

کامبیز اسدزاده
یک شنبه 06 اردیبهشت 1394, 16:33 عصر
سلام ؛

خب ببینید ایراد کار شما در مرحله اول اینه که این ذهنیت رو ایجاد کردین که Qt برای خودش یه مبحث دیگست ! در حالی که در اصل چنین نیست شما وقتی میخواهید از کلاس های QFile استفاده کنید هیچ چیزش بی ربط از C++‎‎‎ نیست فقط این ها یک سری توابع و کلاس هایی هستند که شما نیازی نیست دوباره بازنویسیشون کنید.

به این دو مثال دقت کنید :


#include <QTextStream>
#include <QFile>


QFile MyFile("d://MyFile.txt");
if(MyFile.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream MyStream(&MyFile);
MyStream << "Hello \r\n";
MyStream << "World \r\n";

MyStream.flush();
MyFile.close();
qDebug() << "MyFile Written.";

}



و حالت استاندارد :


// basic file operations
#include <iostream>
#include <fstream>
using namespace std;


int main () {
ofstream myfile;
myfile.open ("example.txt");
myfile << "Hello world.\n";
myfile.close();
return 0;
}


هر دوی این مثال ها نحوه نوشتن در یک فایل رو نشون میده حالا ما به روش استاندارد این کار رو انجام بدیم یا به کمک کتابخانه و کلاس های موجود در Qt فرق خاصی نداره فقط در Qt شما چهار چوبی رو انخاب کردین و بر اساس استاندارد و مستندات ذکر شده در این چهارچوب دارین پیش میرید.

به این نکته اشاره کردم که هیچوقت این ذهنیت رو در خودتون ایجاد نکنید که در C++‎‎‎ روشی هست ولی در Qt چطور ممکنه !!! در اصل به این فکر کنید که Qt کتابخانه ایست که همه موارد لازم رو یکجا جمع آوری کرده برای راحتی کار همین :لبخندساده:

حال با توجه به اینکه لازمه کار برای انتخاب و کار با فایل ها کتابخانه Qt هستش در اینصورت این کلاس هارو در نظر بگیرید :

http://doc.qt.io/qt-5/qfile.html
http://doc.qt.io/qt-5/qimage.html
http://doc.qt.io/qt-5/qsound.html
http://doc.qt.io/qt-5/qpdfwriter.html

هر چیزی در مستندات کیوت موجوده فقط کافیه یکم دقت و به این فکر کنیم که چه چیزی لازمه کارمونه... با فایل قراره ار کنم خب میرم دنبال کلاس فایل مثل QFile (http://doc.qt.io/qt-5/qfile.html)

chikar
یک شنبه 06 اردیبهشت 1394, 18:00 عصر
حالا که این بحث باز شد بگذارید این سوال رو هم من بپرسم، شما حالا مثلا با همین بحث فایل ها یه فرمت جدید رو ساختید، اصلا بگذارید با یه مثال سوال رو بپرسم
شما اگر کیوت رو نصب کنید، همون لحظه می بینید که فایل های با فرمت ui. با دیزاینر qt باز می شه ، بدون اینکه شما اون رو پیش فرض، دیزاینر کیوت قرار بدید، چطوری؟
یا مثلا چطوری می شه یه برنامه رو به پیش فرض ویندوز تبدیل کرد، مثلا یه مدیا پلیر ساختید می خواید با نصبش همه فایل های صوتی و تصویری با اون باز بشه؟

rahnema1
یک شنبه 06 اردیبهشت 1394, 19:02 عصر
حالا که این بحث باز شد بگذارید این سوال رو هم من بپرسم، شما حالا مثلا با همین بحث فایل ها یه فرمت جدید رو ساختید، اصلا بگذارید با یه مثال سوال رو بپرسم
شما اگر کیوت رو نصب کنید، همون لحظه می بینید که فایل های با فرمت ui. با دیزاینر qt باز می شه ، بدون اینکه شما اون رو پیش فرض، دیزاینر کیوت قرار بدید، چطوری؟
یا مثلا چطوری می شه یه برنامه رو به پیش فرض ویندوز تبدیل کرد، مثلا یه مدیا پلیر ساختید می خواید با نصبش همه فایل های صوتی و تصویری با اون باز بشه؟

مثلا در ویندوز این کار با تغییر در رجیستری ویندوز انجام میشه که یک پسوند را با یک برنامه مرتبط می کنیم
https://msdn.microsoft.com/en-us/library/windows/desktop/cc144156(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/cc144158(v=vs.85).aspx
اما معمولا برنامه هایی هستند به نام Installer که می تونیم در اونها این تنظیمات را انجام بدیم این هم یه سری لیست برنامه installer
http://en.wikipedia.org/wiki/List_of_installation_software