آموزش فایل در ++c: نوشتن اطلاعات در فایل متنی [قسمت اول]

آپدیت : بعد از خواندن نوشته برای به دست آوردن مطالب بیشتر در مورد فایل ها به این پست بروید : آموزش کامل فایل ها در سی پلاس پلاس

ما وقتی برنامه می نویسیم اطلاعات  برنامه در رم کامپیوتر قرار می گیرد و این برای ما محدودیت ایجاد می کند چون ۱- رم دارای محدودیت است و توسط قسمت های مختلف سیستم استفاده می شود ۲-وقتی کامپیوتر را خاموش می کنیم یا برنامه را می بندیم اطلاعات از روی آن پاک می شود.

ما از این جا از برای رفع محدودیت ها می توانیم از فایل ها استفاده کنیم زیرا محدویت کمتری نسبت به رم دارد و بعد از خاموش شدن کامپیوتر پاک نمی شود.

داده ها در فایل به دو صورت ذخیره می شود یکی متنی یا اسکی (text)  و دیگری باینری (binary).

این دو روش در ۳ چیز فرق دارند

۱-تعیین انتهای فایل

۲-نحوه ذخیره شدن فایل

۳-تعیین انتهای خط

در قسمت اول آموزش می خواهیم  به نوشتن و خواندن اطلاعات در فایل های متنی بپردازیم.

برای کار با فایل در ++c به کتابخانه fstream احتیاج داریم و باید آن را در برنامه پیوست کرد:

برای باز کردن فایل جهت نوشتن در آن  از کلاس ofstream استفاده می کنیم .فرض کنید شی به اسم   output_file  از کلاس fstream ایجاد می کنیم وفایلی با اسم test و فرمت text می خواهیم ایجاد کنیم:

آرگومان دوم که ios::out است به معنای این است که فایل در جهت ریخته شدن اطلاعات در آن ایجاد شده است.

پایان فایل های متنی با ۱A در مبنای ۱۶ مشخص می شود که برای ایجاد آن در ویندوز می توان کلید ctrl + z را زد.

همیشه بعد از ایجاد فایل باید چک کرد و دید آیا فایل با موفقیت باز شده است یا نه :

cerr در بالا جهت نوشتن خطا ها در سی پلاس پلاس است و exit() هم به برنامه پایان می دهد و به سیستم می فهماند که خطایی رخ داده هر دو در کتاب خانه cstdio قرار دارند.

برای نوشتن اطلاعات در فایل همچون دستور cin است ، فرض کنید که متغیر number یک متغییر از نوغ اعداد صحیح است و می خواهید مقدار آن را در فایل بریزید این گونه عمل می کنیم:

در مثال زیر برنامه از ما یک عدد اعشاری و دو رشته می پرسد و آن ها را در فایل می ریزد این کار را تا زمانی می کند که ما کلید ctrl+z را بزنیم در این مثال ریخت اطلاعات در فایل به خوبی آمده است:

اینم عکسی از دادن ورودی به برنامه:

اجرای برناهه ورودی به فایل

اینم عکسی از خروجی برنامه که فایلی با فرمت .txt است.

خروجی برنامه که یک فایل متنی است

خروجی برنامه که یک فایل متنی است

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

۵۹ comments

  • من هم باید اعداد رو در اکسل ذخیره کنم.منظورتون از API رو متوجه نمی شم

    • سرچ کن API . نرم افزار ها و اپلیکیشن های مختلف توابعی رو در اختیار برنامه نویسان قرار می ده که بتونند با اون نر افزار کار کنند. آفیس مایکروسافت هم یک سری تابع در اختیار شما قرار می ده که می تونید ازش استفاده کنید.
      فرمت اکسل یک فرمت متنی ساده نیست که بتونید توی سی پلاس یک فایل باز کنید و توش متن بریزید. باید داده هایی که می خواهید رو از طریق ای پی آی های اکسل به یک فایل اکسل منتقل کنید.

  • سلام

    من یک سری عدد تصادفی با Srand تولید کردم می خوام بریزمشون تو فایل.الان برنامه رو نوشتم اما صفحه ای که باید بریژه توش اعداد رو نمی دونم از کجا باز کنم.
    int main()
    {
    int i;
    srand(time(0));
    fstream output_file (“test.xls”,”w”);
    if(!output_file)
    {
    cerr <<"File can not open."<<endl;
    exit(1);
    }
    for (i=0;i<30;i++)
    {
    cout << "rand:\n" << rand() <<"\t";
    }

    output_file << rand() <<end1;

    }
    system ("pause");

    }

  • خیلی عالی توضیح دادین
    اما من یک پروژه درسی دارم که باید اونو با اکسل بنویسم
    میدونم که به جای txt باید csv بزارم
    اما این که چطور داخلش بنویسم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
    و اینکه چطور به ستون بعدی برم؟؟؟؟؟؟؟؟؟
    میشه راهنماایی کنید

  • سلام خیلی خوب توضیح دادید واقعا حال کردم ممنونم.

  • با عرض پوزش از ایمیل قبل چطور میشه نام زیر فولدرهای یک فولدر رو تغییر داد.
    آیا فولدر مثل یک فایل محسوب میشود.

  • سلام
    می خوام یه برنامه بنویسم که نام زیر فایل های یک فایل را تغییر بده به طوری که چهار رقم اول آن حذف شود ممنون میشم اگر راهنمایی کنید مثلا اسمabcdefgh تبدیل به efgh شود

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

  • سلام
    اگه بخواییم که خود برنامه یک فایل درست کنه چیکار باید انجام بدیم؟

  • بسیار ممنون ازتون.مطالبتون خیلی کاربردیه

  • سلام…خیلی ممنون بابت اطلاعات ولی میخواستم یه سوال بپرسم.اگر با توجه به مثال خودتون بخوام نمره یه دانش آموزو تغییر بدم باید چیکار کنم؟؟؟

    • فرهاد دلیرانی

      اگر بخواهید یک چیزی را درون فایل تغییر دهید و فایل از نوع دسترسی تصادفی نباشد باید همه ی اطلاعات فایل را بخوانید و بخشی را که می خواهید تغییر دهید و بعد دوباره آن را در فایل بریزید

  • سلام ممنون از اموزشاتون چرا وقتی من میخوام اطلاعات ورودی رو بریزم تو فایل ذخیره شده ام به این اخطار رو میده cin ambigous برنامه ام رو با استراکت نوشتم ممنون میشم اگه پاسخ بدین

  • دستتون درد نکنه واقعا لذت بردم

  • سلام.ممنون از مطالب مفیدتون.
    من یه سوالی داشتم اونم این که میخوام فایل های یه پوشه رو بخونم مثلا یکی یکی تو فایل های متنیمو بگردم و دنبال یه کلمه کلیدی بگردم.میشه راهنماییم کنین؟

    • فرهاد دلیرانی

      وقتی فایل می سازی به جای اسم که قبلا این شکلی می دادی : fileName.txt
      اینطوری اسم بده :
      D:\BOOK\Guide.txt
      اگر هم اسم فایل ها رو می خوای بخونی می تونی از دستور
      system(“”) ;
      استفاده کنی و بین دو کوتیشن از دستورات cmd ویندوز برای خواندن اطلاعات استفاده کنی

  • سوال:
    چطوری میتونیم محتویات داخل فایل رو پاک کنیم، بدون اینکه خودمون مستقیما به سراغ فایل بریم؟
    یعنی از داخل برنامه، بعضی از اطلاعات درون فایل رو پاک کنیم

    • فرهاد دلیرانی

      یک فایل کمکی کنارش بسازید بعد اطلاعات درون فایل اصلی را بخوانید – هر کدام را که نیاز بود درون فایل جدید بنویسید و هر کدام هم خواستید پاک کنید توی فایل کمکی ننویسید – در آخر تمام اطلاعات موجود در فایل کمکی را درون فایل اصلی بریزید

  • با سلام
    فقط چطور میتونیم اطلاعات را از فایل بخونیم

  • خدا خیرتون بده خیلی بدرد خورد.

    • ببخشید من میخوام یه برنامه بنویسم( تو محیط ویژوال )که۱-نمره های دانشجوها و شماره دانشجوییشون رو بگیره از کاربر(اطلاعاتی که گرفته میشن با هم یک فاصله دارن)تو یه فایل ذخیره کنه.
      ۲-اطلاعات داخل فایلو سورت کنه حالا مثلا نمره ها رو به ترتیب صعودی مرتب کنه یا اسامی رو طبق حروف الفبا مرتب کنه.
      ۳-اطلاعات مرتب شده رو تو یه فایل دیگه بریزه.
      ——————————-
      تو قسمت دوم مشکل دارم ممنون میشم راهنمایی کنید.

      • محمد جمالی

        سلام
        کد برنامه خود را برای ما بفرستید تا برسی شود

        اما در کل شما میتوانید تمام اطلاعات فایل را در حافظه load کرده ( در صورت کم بودن داده ها ) پس از مرتب کردن فایل را باز نویسی کنید.

        • سلام
          واقعا ممنون که اینقدر پیگیر هستید برای کمک به افراد

          مخصوصا برای ما که دانشجوی این رشته هستیم و تازه وارد اینکه شما دست مارو بگیرید تا راه بیافتیم جای دوصد قدر دانی داره و باز مخصوصا اگه مثل من شهرستان باشید و دستتون از امکانات شهر های بزرگ کوتاه باشه …

          این موضوع مطرح شده توی سوال نطرم رو جلب کرد ولی هر کاری کردم نشد …

          اگه بشه لطف کنید کد رو برای بنده هم ارسال کنید خیلی ممنون میشم …

          باز هم از زحمات شما سپاسگزارم (:

  • سلام . ممنون از آموزشتون . من دقیقا این رو کپی کردم ولی اجرا نشد .. ارور های زیر رو میده:
    Error ۱ error C2679: binary ‘>>’ : no operator found which takes a right-hand operand of type ‘std::string’ (or there is no acceptable conversion)
    Error ۲ error C1903: unable to recover from previous error(s); stopping compilation
    ۳ IntelliSense: no operator “>>” matches these operands
    operand types are: std::istream >> std::string
    ۴ IntelliSense: no operator “<<" matches these operands
    operand types are: std::fstream << std::string

  • سلام خسته نباشید … میخواستم بدونم نحوه ی کار (: & ؟ ) در زبان ++c چیه ؟ ممنون میشم اگه جواب بدید.

    • محمد جمالی

      برای نوشتن شرط های درون ساختار یک دستور به عنوان مثال :
      حالت اول:
      if(a == ‘a’) cout << "yes"; else cout << "no"; حالت ذدوم و با استفاده از ساهختار شرطی خطی: cout << (a == 'a' ? "yes" : "no" ); که اگر ساختار را به این صورت در نظر بگیریم: x ? y : z x شرطی است ک باید برسی شود y قسمتی ک در صورت درست بودن شرط اجرا شود z قسمتی ک در صورت اشتباه بودن شرط اجرا شود

  • چطوری میشه قسمتی ازیک فایل روحذف کرد؟

    • فرهاد دلیرانی

      راه های مختلف هست ولی آسان ترین کار اینه که یک فایل کمکی بسازی و اطلاعات به اوندمنتقل کنی و جایی رو کی می خوای پاک کنی به فایل جدید منتقل نکنی

  • سلام خسته نباشید … آموزشتون فوق العاده بود … منتهی یک سوال : کدوم دستوره که باعث میشه با ctrl+z به انتهای فایل برسیم؟!

    ممنون میشم جواب بدید
    یا حق

    • فرهاد دلیرانی

      Ctrl+ z باعث نمی شه به انتهایی فایل برسی! ، باعث می شه عمل خواندن ورودی تمام کنیم، فرض کن یک برنامه ای نوشتی که معلوم نیست چند تا ورودی بهش می خوای بدی، اون موقع دستور cin می داری توی یک while و در بدنه ی آن چیز هایی رو که گرفتی به متغییر هایی که می خواهی نسبت می دهی و هر وقت دیگه نخواستی ورودی جدید بدی کنترل به علاوه ضد رو می زنی،
      اگر می خوای بری تو فایل از دستور seekp و seekg می توانی استفاده کنی.

  • اینجا نمیشه حالتی باشه که یک فایل رو باز کنیم و سپس ببندیم. هر شی که ایجاد می کنیم اتوماتیک فایل مورد نظرش رو باز می کنه؟

    • محمد جمالی

      خیر اینگونه نیست !
      شما میتوانید با یک شی ، چندین فایل متفاوت را باز کنید و ببندید .

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

  • من این تابع رو توی منوی گرافیکی نوشتم ولی انگار فایل سرایند fstream رو نخونده string رو هم errorمیده علتش چی میتونه باشه
    (من بار اوله که mfc کار میکنم)
    ممنون

  • خیلی عالی بود

  • سلام
    چه طور میشه فایل رو تو یه ادرس خاص باز کرد و یا از یه ادرس خاص خوند.

    توی سی چطور میشه این کار رو کرد؟

    با تشکر

    • فرض کنیم در یک برنامه که به زبان c نوشتین یک اشاره گر به فایل رو به این صورت باز کردید:

      بخش “data.txt” یک رشته حاوی آدرس کامل فایل مورد نظر هستش، اما در زبان c یک رشته رو چطور نمایش میدیم؟! اگر از قبل تعداد کاراکتر هاش (اندازه) رو میدونید یا حتی میتونید یک اندازه ثابت براش در نظر بگیرید که میدونید اگر بعد از این، این رشته پر بشه بیشتر از فلان تعداد کاراکتر توش نمیاد، پس یک آرایه از کاراکتر ها رو تعریف کنید. اما اگر اندارش رو نمی دونید میتونید از

      استفاده کنید. مقدار دهی کنید و به جای “data.txt” متغیر حاوی آدرس مورد نظرتون رو قرار بدید.

  • سلام ممنون از مطالبتون
    اگر بخواهم یک فایل را که در آن چند عکس با فرمت bmp
    ذخیره شده است را بخوانم و فریم به فریم نشان دهم به چه صورت است ؟

    • فرهاد دلیرانی

      تا حالا خودم تست نکردم ولی بستگی به زبان برنامه نویسی داره مثالا سی شارپ خودش یک لایبری برای کار با bmp داره ولی سی پلاس نمی دونم

  • با سلام
    فایل txt ایجاد شده در چه محلی ذخیره میشه؟ ینی اگه در خروجی برنامه نمایش داده نشه، کجا میشه پیداش کرد؟

  • عالی بود ممنون از مطالبتون

  • ba salam ,an function neveshtam ke miyad ye object az ye class ro to file save mikone
    moshkel injas harbar tabe seda zade mishe etelaat ghabli pak mishe va faghat etelaat vorodi jadid tosh rikhte mishe

    chetor in moshkel ro hall konam

    • فرهاد دلیرانی

      مشکلت این فایل با خاصیت app (چسباندن باز نمی کنی) ، اگر به این صورت فایل باز کنی مشکل حل می شه :

  • با سلام خیلی خیلی عالی بود ممنون

  • Pingback: آموزش فایل در ++c قسمت دوم :خواندن اطلاعات از فایل متنی | open-mind

Leave a Reply

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *