آموزش کار با فایل ها در C++ Qt

خواندن و نوشتن فایل ها در Qt c++

 

چارچوب Qt برای کار با فایل ها کلاس QFile را ارائه کرده است. QFile رابطی برای خواندن و نوشتن فایل های متنی و یا باینری می باشد. از این کلاس هم می توان به صورت تنها و هم با سایر کلاس ها مانند QTextStream و QDataStream استفاده نمود.

توجه: برای درک بهتر این مقاله آشنایی با مبانی زبان برنامه نویسی C++ الزامی است.

برای استفاده از این کلاس باید هدر <QFile> را include کنید.

نام فایلی که قصد کار کردن با آن را دارید معمولا در constructor کلاس ارسال می شود. جدا کننده در نام فایل باید / باشد حتی در ویندوز! اگرچه در ویندوز جدا کننده \ هم پذیرفته می شود ولی بهتر است برای حفظ امکان جابجایی کد خود همیشه از / استفاده کنید.

متد های open و close برای باز کردن و بستن فایل استفاده می شوند. با استفاده از توابع read و readLine و readAll و write می توانید اعمال خواندن و نوشتن را انجام دهید. اگرچه معمولا این کارها با استفاده از کلاس های QTextStream و QDataStream انجام می شوند.

تابع size هم مقدار حجم فایل را بر می گرداند.

مثال نوشتن در فایل

[pastacode lang=”cpp” manual=”%23include%20%3CQFile%3E%0A%20%0Aint%20main(int%20argc%2C%20char%20*argv%5B%5D)%0A%7B%0A%20%20%20%20QFile%20file(%22E%3A%2F1.txt%22)%3B%0A%20%20%20%20if%20(file.open(QIODevice%3A%3AWriteOnly%20%7C%20QIODevice%3A%3AText))%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20file.write(%22salam%22)%3B%0A%20%20%20%20%20%20%20%20file.close()%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%200%3B%0A%7D” message=”” highlight=”” provider=”manual”/]

در خط 5 یک نمونه از کلاس QFile با نام متغییر file ایجام می کنیم که قصد کار با فایل E:\1.txt را دارد.

در خط 6 فایل را باز می کنیم. متد open آرگومنتی از نوع OpenMode دریافت می کند که مشخص کننده نحوه باز کردن فایل است. برخی از مقادیر معتبر عبارتند از QIODevice::ReadOnly, QIODevice::WriteOnly, QIODevice::ReadWrite, QIODevice::Append. در اینجا فایل به صورت متن فقط قابل نوشتن باز شده است.

در خط 8 عبارت salam در فایل نوشته می شود و در خط بعد فایل بسته می شود.

نمونه کد خواندن فایل

[pastacode lang=”cpp” manual=”%23include%20%3CQFile%3E%0A%23include%20%3CQDebug%3E%0A%20%0Aint%20main(int%20argc%2C%20char%20*argv%5B%5D)%0A%7B%0A%20%20%20%20QFile%20file(%22E%3A%2F1.txt%22)%3B%0A%20%20%20%20if%20(file.open(QIODevice%3A%3AReadOnly%20%7C%20QIODevice%3A%3AText))%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20QString%20text%20%3D%20file.readAll()%3B%0A%20%20%20%20%20%20%20%20file.close()%3B%0A%20%20%20%20%20%20%20%20qDebug()%20%3C%3C%20text%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%200%3B%0A%7D” message=”” highlight=”” provider=”manual”/]

طریقه باز کردن فایل مانند نمونه کد نوشتن فایل است با این تفاوت که OpenMode به جای QIODevice::WriteOnly مقدار QIODevice::ReadOnly داده شده است چرا که در اینجا قصد نوشتن فایل را نداریم.

بعد از باز کردن فایل با استفاده از تابع readAll تمام محتوای فایل را می خوانیم و در متغییر text که از نوع QString است ذخیره می کینم. این محتوا در خط 11 در کنسول نمایش داده می شود.

بررسی وجود و یا عد وجود فایل

[pastacode lang=”cpp” manual=”QFile%3A%3Aexists(%22D%3A%5C%5C1.txt%22)%3B” message=”” highlight=”” provider=”manual”/]

کد بالا در صورت وجود فایل D:\1.txt مقدار true بر می گرداند در غیر این صورت مقدار false.

کپی کردن فایل

[pastacode lang=”cpp” manual=”QFile%3A%3Acopy(%22D%3A%5C%5C1.txt%22%2C%20%22D%3A%5C%5C2.txt%22)%3B” message=”” highlight=”” provider=”manual”/]

فایل D:\1.txt را در D:\2.txt کپی می کند. در صورت موفقیت مقدار true را بر می گرداند.

حذف کردن فایل

[pastacode lang=”cpp” manual=”QFile%3A%3Aremove(%22D%3A%5C%5C2.txt%22)%3B” message=”” highlight=”” provider=”manual”/]

کد بالا فایل D:\2.txt را حذف می کند. در صورت موفقیت مقدار true را بر می گرداند.
لطفا سوالات و مشکلات خود در با ما در میان بگذارید.

اطلاعات بیشتر در مورد QFile

Tags: , , , , , ,