در این قسمت ما به دو کلاس ذکر شده بطور مختصر و با ارائه مثال میپردازیم تا پایه ای گردد برای کلاس ها و آموزش های بالاتری از فریمورک 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; }


Qt_QDir-01



مثال : گرفتن فایل ها و نمایش آنها همراه با اندازه آنها ، میتوان با تغییرات در سرت آن مدل آن را تغیر داد یا اینکه میتوان با تغییر در 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; }