C++ Files

در ++C می‌توانیم با استفاده از کتابخانهٔ استاندارد <fstream> روی فایل‌ها کار کنیم: خواندن (Read)، نوشتن (Write)، و پیوست (Append). این کار با سه کلاس اصلی انجام می‌شود:

کلاسکاربرد
ofstreamنوشتن در فایل (Output File Stream)
ifstreamخواندن از فایل (Input File Stream)
fstreamهر دو (خواندن و نوشتن)

1️⃣ گنجاندن کتابخانه

#include <fstream> #include <iostream> using namespace std;

2️⃣ نوشتن در فایل

#include <fstream> #include <iostream> using namespace std; int main() { ofstream outFile("example.txt"); // ساخت/بازکردن فایل برای نوشتن if (!outFile) { cout << "Error opening file\n"; return 1; } outFile << "Hello C++ Files!\n"; outFile << "This is a second line.\n"; outFile.close(); // حتماً ببندیم return 0; }

📌 اگر فایل وجود نداشته باشد ساخته می‌شود؛ اگر باشد محتوای قبلی پاک می‌شود.

3️⃣ خواندن از فایل

#include <fstream> #include <iostream> #include <string> using namespace std; int main() { ifstream inFile("example.txt"); if (!inFile) { cout << "Error opening file\n"; return 1; } string line; while (getline(inFile, line)) { cout << line << endl; // چاپ هر خط } inFile.close(); return 0; }

4️⃣ پیوست (Append) به فایل

برای اضافه‌کردن متن به انتهای فایل، حالت ios::app را استفاده می‌کنیم:

ofstream outFile("example.txt", ios::app); outFile << "New line added!\n"; outFile.close();

5️⃣ استفاده از fstream برای خواندن و نوشتن

#include <fstream> #include <iostream> using namespace std; int main() { fstream file("data.txt", ios::in | ios::out | ios::app); if (!file) { cout << "Error opening file\n"; return 1; } file << "Appending with fstream\n"; // نوشتن file.seekg(0); // برگرداندن مکان خواندن به اول string line; while (getline(file, line)) { cout << line << endl; // خواندن } file.close(); return 0; }

6️⃣ حالت‌های مهم (Open Modes)

حالتتوضیح
ios::inبازکردن برای خواندن
ios::outبازکردن برای نوشتن
ios::appنوشتن در انتهای فایل (پیوست)
ios::ateمکان فایل به انتها می‌رود ولی قابل حرکت است
ios::truncمحتوای قبلی حذف می‌شود (پیش‌فرض با ios::out)
ios::binaryحالت دودویی (Binary Mode)

حالت‌ها را می‌توان ترکیب کرد:

fstream f("file.bin", ios::in | ios::out | ios::binary);

7️⃣ کار با فایل دودویی (Binary)

برای داده‌های غیرمتنی:

#include <fstream> using namespace std; struct Person { char name[20]; int age; }; int main() { Person p = {"Alice", 25}; ofstream out("person.dat", ios::binary); out.write(reinterpret_cast<char*>(&p), sizeof(p)); out.close(); Person p2; ifstream in("person.dat", ios::binary); in.read(reinterpret_cast<char*>(&p2), sizeof(p2)); in.close(); }

خلاصه نکات

  • همیشه بعد از کار با فایل، ()close فراموش نشود.

  • هنگام بازکردن فایل، خطای عدم وجود یا عدم دسترسی را بررسی کنید.

  • برای کارهای پیچیده‌تر می‌توان از حالت‌های مختلف (مانند binary، app) ترکیب گرفت.

  • کتابخانهٔ STL (مثل std::getline) خواندن خط‌به‌خط را ساده می‌کند.

💡 نتیجه:
با کلاس‌های ifstream, ofstream, و fstream می‌توانید هر نوع عملیات ورودی/خروجی روی فایل‌های متنی و دودویی را در C++ انجام دهید.