در این قسمت ما به دو کلاس ذکر شده بطور مختصر و با ارائه مثال میپردازیم تا پایه ای گردد برای کلاس ها و آموزش های بالاتری از فریمورک Qt
QDir :
این کلاس برای دسترسی به دایرکتوری و محتویات آنها و دستکاری نام و مسیر فایلها میباشد .
تابع bool QDir::exists() برای چک کردن آدرس میباشد اگر آدرس موجود باشد مقدار درست را برمیگرداند و اگر موجود نباشد مقدار غلط را برمیگرداند .
مثال :
#include <QDir> int main(int argc, char *argv[]) { QDir dir("debug"); if (!dir.exists()) { qWarning("Cannot find the debug directory"); } else if(dir.exists()) { qWarning("find the debug directory"); } return 0; }
تابع QString QCoreApplication::applicationDirPath() برای گرفتن آدرس برنامه میباشد
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); qDebug() << QCoreApplication::applicationDirPath(); return 0; }
مثال : گرفتن فایل ها و نمایش آنها همراه با اندازه آنها ، میتوان با تغییرات در سرت آن مدل آن را تغیر داد یا اینکه میتوان با تغییر در enum QDir::Filter آن ، تعیین کرد که فایل ، فولدر ... دیده بشن .
#include <QDebug> #include <QDir>
int main(int argc, char *argv[]) { QDir dir; dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); dir.setSorting(QDir::Size | QDir::Reversed);
QFileInfoList list = dir.entryInfoList(); qDebug() << "Bytes Filename"; for (qint32 i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); qDebug() << QString("%2 %1").arg(fileInfo.size(), 10 )
.arg(fileInfo.fileName()); } return 0; }
توضیح در آرگمان اول عدد 10 ،تعداد کارکتر های خالی بین آرگمان اول و آرگمان دوم میباشد .
تابع QDir::absolutePath() آدرس کامل مسیر را بازمیگرداند .
#include <QDir> #include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[]) {
QDir dir("debug"); qDebug() << dir.absolutePath(); return 0; }
تابع QDir::fromNativeSeparators(const QString &pathName) مقدار"c:\\winnt\\system32" را گرفته و مقدار "c:/winnt/system32" را بازمیگرداند .
تابع QDir::toNativeSeparators(const QString &pathName) برعکس کار تابع بالا را میکند .
تابع bool QDir::isRoot() در صورتی که آدرس روت باشد مقدار درست را برمیگرداند درصورتی که روت نباشد مقدار غلط را نمایش میدهد .
تابع bool QDir::mkdir(const QString &dirName) این تابع برای ایجاد یک مسیر ، در مسیر موجود میباشد . درصورت ساخت دایرکتوری مقدار درست را برمیگرداند و درصورت عدم ساخت آن مقدار نادرست را برمیگرداند .
مثال :
#include <QDir> #include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[]) {
QDir dir("c:\\"); qDebug() << dir.mkdir("fileName"); return 0; }
تابع bool QDir::rmpath(const QString &dirPath) برای پاک کردن یک دایرکتوری میباشد و نحوه استفاده از آن همانند مثال بالاست .
تابع QString QDir::dirName() نام دایرکتری موجود را برمیگرداند .
تابع bool QDir::remove(const QString &fileName) برای پاک کردن فایلی درون دایرکتوری مورد نظر میباشد.
تابع bool QDir::removeRecursively() برای پاک کردن یک مسیر با تمام زیرشاخه ها و فایلهایش میباشد .
تابع bool QDir::rename(const QString &oldName, const QString &newName) برای تغییر نام یک فلدر میباشد .
مثال :
#include <QDir> #include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[]) {
QDir dir("c:/test"); qDebug() << dir.rename("folder","newName");
//test->folder >> test->newName return 0; }
----------------------------------------------------------------
QFile :
این کلاس برای خواندن و نوشتن تکست یا دیتای باینری درون فایل میباشد .
نام فایل معمولا با سازنده کلاس تعیین میشود اما میتوان از تابع setFileName() نیز استفاده گردد . شما میتوانید برا چک کردن این که فایل از قبل وجود دارد یه خیر از تابع exists() استفاده کنید و برای پاک کردن فایل میتوانید از تابع remove() استفاده کنید .
فایل با تابع open() بازمیگردد و با تابع close() بسته میشود .
برای نوشتن یا خواندن داده از فایل میتوان از توابع QDataStream () , QTextStream یا حتی از QIODevice() , read() , readLne() , readAll() , write() , getChar() , putChar() , ungetChar() استفاده کرد .
برای فهمیدن سایز فایل میتوان از تابع size()
استفاده کرد و برای گرفتن موقعیت فعلی فایل یا جابجایی به موقعیت دلخاه
میتوان به ترتیب از
pos()
seek()
استفاده کرد . و تابع atEnd() زمانی مقدار درستی را نشان میدهد که به انتهای فایل رسیده باشیم .
مثال ساخت فایل و گرفتن سایز فایل :
#include <string> #include <QDebug> #include <QFile>
int main(int argc, char *argv[]) { //use setFileName and QTextStream QString path1 = "file_1.txt"; QString text1 = "hello .... !"; QFile file_out1; file_out1.setFileName(path1); QTextStream out1(&file_out1); file_out1.open(QIODevice::WriteOnly | QIODevice::Text); out1 << text1 << "\n"; file_out1.close(); ///get size QFile fileSZ("file_1.txt"); fileSZ.open(QIODevice::ReadOnly); qintptr sizeFile; sizeFile = fileSZ.size(); qDebug () << sizeFile; fileSZ.close(); ///creat file2 QString text2 = "hello .... !"; QFile file_out2("file_2.txt"); file_out2.open(QIODevice::WriteOnly | QIODevice::Text); file_out2.write("hello .... !"); file_out2.close(); return 0; }
مثال ساخت فایل با استرینگ فارسی و گرفتن سایز فایل :
#include <string> #include <QDebug> #include <QFile>
int main(int argc, char *argv[]) {
QString path1 = "file_1.txt"; QString text1 = QString::fromWCharArray(L"سلام"); QFile file_out1; file_out1.setFileName(path1); QTextStream out1(&file_out1); file_out1.open(QIODevice::WriteOnly | QIODevice::Text); out1 << text1 << "\n"; out1 << QString::fromWCharArray(L"مثال استرینگ فارسی"); file_out1.close(); ///get size QFile fileSZ("file_1.txt"); fileSZ.open(QIODevice::ReadOnly); qintptr sizeFile; sizeFile = fileSZ.size(); qDebug () << sizeFile; fileSZ.close(); return 0; }
مثال خواندن از فایل به صورت خط به خط :
#include <string> #include <QDebug> #include <QFile>
int main(int argc, char *argv[]) {
QFile readFile("file_1.txt"); readFile.open(QIODevice::ReadOnly | QIODevice::Text); QTextStream in(&readFile); QString input = in.readLine(); while(input != NULL) { qDebug () << input; input = in.readLine(); } readFile.close();
return 0; }
برای پاک کردن فایل میتوان از تابع QFile::remove(const QString &fileName) و از تابع QFile::remove() استفاده کرد .
مثال :
#include <string> #include <QDebug> #include <QFile> #include <QFile>
int main(int argc, char *argv[]) {
bool b; b = QFile::remove("file_R.txt"); if (b == true) { qDebug() << "file removed ..."; } else if (b == false) { qDebug() << "error ..."; }
return 0; }
مثال از تابع remove() :
#include <string> #include <QDebug> #include <QFile>
int main(int argc, char *argv[]) { bool b; QFile readFile("file_R.txt"); b = readFile.remove(); readFile.close(); if (b == true) { qDebug() << "file removed ..."; } else if (b == false) { qDebug() << "error ..."; } return 0; }
برای تغییر نام یک فایل از تابع bool QFile::rename(const QString &oldName, const QString &newName) استفاده میکنیم .
#include <string> #include <QDebug> #include <QFile> #include <QFile>
int main(int argc, char *argv[]) {
bool b; b = QFile::rename("file_R.txt" , "new_name.txt"); if (b == true) { qDebug() << "file renamed ..."; } else if (b == false) { qDebug() << "error ..."; }
return 0; }
تابع QFile::setPermissions(const QString &fileName, Permissions permissions) برای تعیین سطح دسترسی فایل میباشد (فقط خواندنی ، فقط نوشتنی و .... )
مثال :
#include <string> #include <QDebug> #include <QFile>
int main(int argc, char *argv[]) {
bool b = QFile::setPermissions("new_name.txt",
QFileDevice::ReadOwner); if (b == true) { qDebug() << "file is ReadOwner ..."; } else if (b == false) { qDebug() << "error ..."; }
return 0; }