Fayl va kataloglar bilan ishlash jarayonlarini dasturlash
Mavzu: Fayl va kataloglar bilan ishlash jarayonlarini dasturlash Reja: 1. Qt dasturlash muhitida fayl va kataloglar bilan ishlash. 2. Fayl va kataloglar bilan ishlashda qidiruv,saralash algoritmlari bilan ishlash va dasturlash. 3. Fayl va kataloglarni tanlash va tarkibini ko’rsatish jarayonlarini dasturlash.
1. Qt dasturlash muhitida fayl va kataloglar bilan ishlash. Kataloglar (yoki papkalar, Windows terminologiyasida) va fayllar bilan ishlash barcha operatsion platformalarda mustaqil bo'lmagan sohadir, shuning uchun Qt quyidagi sinflarga asoslanib bunday operatsiyalar uchun o'z yordamini beradi: ♦ QDir - kataloglar bilan ishlash uchun; ♦ QFile - fayllar bilan ishlash uchun; ♦ QFileinfo - fayl haqida ma'lumot olish uchun; ♦ QiODevice - kirish / chiqish uchun mavhum sinf; ♦ QBuffer - fayllarni kompyuter xotirasida aks ettirish uchun. Kirish chiqish. QiODevice sinfi QiODevice sinfi - bu kirish / chiqish qurilmasini ochish va yopish uchun virtual usullarni o'z ichiga olgan, ma'lumot bloklarini yoki individual belgilarni o'qish va yozish uchun kirish / o'chirish moslamasini yaratadigan mavhum sinf. Muayyan qurilmani amalga oshirish meros qolgan sinflarda sodir bo'ladi. Qt QiODevice sinfini meros qilib oladigan to'rtta sinfga ega: ♦ QFile - fayllar bilan operatsiyalarni bajarish uchun sinf; ♦ QBuffer - QByteArray-ga ma'lumot yozishga va o'qishga imkon beradigan bufer sinf; ♦ QAbstractSocket - rozetkalar orqali tarmoq aloqasi uchun tayanch sinf; ♦ QProcess - bu qo'shimcha dalillar bilan jarayonlarni boshlash qobiliyatini ta'minlaydigan va QiODevice-da belgilangan usullar yordamida ushbu jarayonlar bilan aloqa qilish imkonini beradigan sinf. Qurilma bilan ishlash uchun uni QiODevice sinfining sarlavha faylida belgilangan rejimlardan birida ochish kerak: ♦ QiODevice :: NotOpen - qurilma ochiq emas (bu qiymatni ochiq () usuliga o'tkazish mantiqiy emas); ♦ QiODevice :: Readonly - faqat ma'lumotlarni o'qish uchun ochiq qurilma; ♦ QiODevice :: WriteOnly - faqat ma'lumot yozish uchun qurilmani ochish;
♦ QiODevice :: ReadWrite - ma'lumotlarni o'qish va yozish uchun qurilma ochish (Readonly | writeOnly kabi); ♦ QiODevice :: Append - ma'lumotlarni qo'shish uchun ochiq qurilma; ♦ QiODevice: Buferlanmagan - o'qish va yozish oralig'ini chetlab o'tib, ma'lumotlarga to'g'ridan-to'g'ri kirish uchun ochilish; ♦ QiODevice :: Matn - platformaga bog'liq holda satrlarni ajratish belgilarini o'zgartirish uchun ishlatiladi. Windows "\ r \ n", MacOS X va Unix "\ r" dan foydalanadi; ♦ QiODevice :: Kesib oling - barcha ma'lumotlar, agar iloji bo'lsa, ochilish paytida o'chirilishi kerak. Dastur bajarilishining istalgan vaqtida qurilma qaysi rejimda ochilganligini bilish uchun openMode() usulini chaqirish kerak. Siz read() va write() usullari yordamida ma'lumotlarni o'qishingiz va yozishingiz mumkin. Bir vaqtning o'zida barcha ma'lumotlarni o'qish uchun readAll() usuli aniqlanadi, bu ularni QByteArray turidagi ob'ektga qaytaradi.Bir satr yoki belgi mos ravishda readLine () va getChar () usullari bilan o'qilishi mumkin. QiODevice sinfi joriy pozitsiyani o'zgartirish usulini belgilaydi:seek(). Siz joriy pozitsiyani pos o usuliga murojaat qilib olishingiz mumkin. Ammo esda tutingki, ushbu usullar faqat to'g'ridan-to'g'ri ma'lumotlarga kirish uchun qo'llaniladi. Tarmoq ulanishi bo'lgan ketma-ket kirish bilan ular o'zlarining ma'nolarini yo'qotadilar. Bundan tashqari, bu holda qurilma ma'lumotlarini hajmini qaytaradigan size () usuli ham ma'qul emas. Ushbu barcha operatsiyalar faqat QFile, QBuffer va QTemporaryFile sinflariga qo'llaniladi. Qt qo'llab-quvvatlamaydigan o'zingizning kirish/ chiqish qurilmangiz sinfini yaratish uchun siz QiODevice sinfini meros qilib olishingiz va unda readData() va writeData () usullarini qo'llashingiz kerak. Aksariyat hollarda siz open(), close() va atEnd() usullarini bekor qilishingiz kerak bo'lishi mumkin. QiODevice sinfining interfeysi tufayli barcha qurilmalar bilan bir xil tarzda ishlash mumkin va ish paytida, odatda, qurilma fayl, bufer yoki boshqa qurilma
bo'ladimi, farq qilmaydi. Masalan, ushbu usul yordamida har qanday qurilmadan konsolga ma'lumotlarni chiqarish mumkin: void print(QIODevice* pdev) { char ch; QString str; pdev->open(QIODevice::Readonly); for (; !pdev->atEnd();) { pdev->getChar(&ch); str += ch; pdev->close(); qDebug() << str; QIODevice klassi kirish / chiqish qurilmasi to'g'risida ma'lumot olish uchun ishlatilishi mumkin bo'lgan bir qator usullarni taqdim etadi. Masalan, ba'zi qurilmalar faqat ma'lumot yozishi mumkin, boshqalari faqat o'qishi mumkin, boshqalari esa ikkalasini ham bajarishga qodir. Qurilma bilan ishlashda qanday operatsiyalar mavjudligini tekshirish uchun isReadable() va isWriteable () usullaridan foydalaning. Fayllar bilan ishlash. QFile klassi QFile sinfi QIODevice sinfidan meros bo'lib o'tgan. U fayllar bilan ishlash usullarini o'z ichiga oladi: ma'lumotlarni ochish, yopish, o'qish va yozish. Konstruktorda fayl nomini o'z ichiga olgan satrni o'tish orqali ob'ekt yaratishingiz mumkin. Siz konstruktorda hech narsa o'tolmaysiz, lekin uni ob'ektni yaratgandan so'ng, setName() usulini chaqirib bajaring. Misol uchun: QFile file; file.setName("file.dat"); Fayllar bilan ishlash jarayonida ba'zan siz fayl ochiq yoki yo'qligini bilishingiz kerak. Buning uchun QIODevice :: isOpen() usuli chaqiriladi, agar fayl ochiq bo'lsa, u haqiqiy bo'lsa, aks holda noto'g'ri bo'ladi. Faylni yopish uchun close () usuliga murojaat qiling. Yopiq bo'lganda, buferdagi barcha ma'lumotlar yoziladi.
Agar siz bufer ma'lumotlarini faylga yopmasdan yozmoqchi bo'lsangiz, unda QFile::flush() usuli chaqiriladi. Sizga kerak bo'lgan fayl mavjudligini QFile::() statik usuli yordamida tekshirishingiz mumkin. Ushbu usul faylga to'liq yoki nisbiy yo'lni o'z ichiga olgan satrni qabul qiladi. Agar fayl topilsa, usul haqiqiy qaytib keladi, aks holda - noto'g'ri. Ushbu operatsiyani bajarish uchun, shuningdek, statik bo'lmagan QFile::usuli() mavjud, u fileName() usuli bilan qaytarilgan faylning mavjudligini tekshiradi. QIODevice::read() va QIODevice ::write() usullari bloklarga fayllarni o'qish va yozish imkonini beradi. Fayllar bilan ishlashning ba'zi usullarini qo'llashni namoyish etamiz: QFile filel("filel.dat"); QFile file2("file2.dat "); if (file2.exists()) { // Файл уже существует . Перезаписать ? } if (!filel.open(QIODevice::Readonly)) { qDebugO << "Ошибка открытия для чтения"; } if (!file2.open(QIODevice::WriteOnly)) { qDebugO « "Ошибка открытия для записи"; } char а[1024]; while(!filel.atEnd()) { int nBlocksize = filel.read(a, sizeof(a)); file2.write(a, nBlocksize); } filel.close(); file2.close(); Agar siz bir vaqtning o'zida ma'lumotlarni o'qish yoki yozish kerak bo'lsa, unda QIODevice::write() va QIODevice::readAll() usullaridan foydalaning. Barcha