انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: نحوه نوشتن و خواندن یک پرونده در زبان C(حل شد)  (دفعات بازدید: 436 بار)

0 کاربر و 4 مهمان درحال مشاهده موضوع.

آفلاین 🇬🇧بریتانیای کبیر🇬🇧

  • High Hero Member
  • *
  • ارسال: 2613
  • جنسیت : پسر
  • GOD SAVE THE KING/QUEEN
 در همه جا خواندم که در تابع fopen، اگه در حالت باز شدن پرونده +r یا +w بزنیم میشه هم خواند و هم نوشت ولی این اتفاق نمیفته.
چطور میشه با یک بار باز کردن پرونده هر دو کارو کرد؟
« آخرین ویرایش: 28 مهر 1403، 10:20 ق‌ظ توسط 🇬🇧بریتانیای کبیر🇬🇧 »
🇬🇧🏴󠁧󠁢󠁥󠁮󠁧󠁿🏴󠁧󠁢󠁷󠁬󠁳󠁿🏴󠁧󠁢󠁳󠁣󠁴󠁿🇬🇧

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4867
  • جنسیت : پسر
  • masoft قدیم
FILE *f;
f = fopen("/file/path","w+");
« آخرین ویرایش: 27 مهر 1403، 10:13 ب‌ظ توسط nixoeen »

آفلاین 🇬🇧بریتانیای کبیر🇬🇧

  • High Hero Member
  • *
  • ارسال: 2613
  • جنسیت : پسر
  • GOD SAVE THE KING/QUEEN
این رو آزمایش کردم، جواب نمیده. فقط میشه خواند ازش.

به عنوان مثال کد زیر را آزمایش کنید. باید اول در پرونده file.txt بنویسه Amin و بعد اونو در صفحه چاپ کنه ولی فقط درونه پرونده مینویسه و چاپی در کار نیست.
#include <stdio.h>

int
main (void)
{
  char str [80];
  FILE *fptr;

  fptr = fopen ("file.txt", "w+");

  fputs ("Amin", fptr);

  fgets (str, 80, fptr);
  fputs (str, stdout);

  fclose (fptr);

  return 0;
}
« آخرین ویرایش: 27 مهر 1403، 10:30 ب‌ظ توسط 🇬🇧بریتانیای کبیر🇬🇧 »
🇬🇧🏴󠁧󠁢󠁥󠁮󠁧󠁿🏴󠁧󠁢󠁷󠁬󠁳󠁿🏴󠁧󠁢󠁳󠁣󠁴󠁿🇬🇧

آفلاین esmaeelE

  • ناظر انجمن
  • *
  • ارسال: 1263
  • جنسیت : پسر
نکته اینجاست وقتی روی فایل می‌نویسید اشاره‌گر به جلو حرکت می‌کند.
برای اینکه بتوانید از ابتدای فایل بخوانید باید اشاره‌گر فایل را به ابتدای فایل برگردانید. برای این‌کار می‌تونید از تابع fseek یا rewind استفاده کنید.



#include <stdio.h>

int
main (void)
{

  char str [80];
  FILE *fptr;
  char *my_ptr=0;

  fptr = fopen ("file.txt", "w+");

  int c = fputs ("Amin\n", fptr);
  printf("check write to file: %d\n", c);
 
  // move file pointer(fptr) to beginnig
  fseek(fptr, 0, SEEK_SET);

  my_ptr=fgets(str, 80, fptr);
  printf("check read from file: %s\n", my_ptr);

  printf("read this line from file:\n%s", str);

  fclose (fptr);

  return 0;
}

در خواندن فایل‌های متنی وقتی کار پیچیده‌تر شد بهتره از تابع getline برای خواندن خط به خط محتویات فایل استفاده کنید.
 و سپس از sscanf برای جدا کردن محتویات هر خط و ذخیرهٔ هر فیلد داده در متغیر مورد نظر بهره ببرید.

دستورات را خط به خط اجرا کنید و خروجی توابع IO را بررسی کنید. می‌توانید نوع و مقدار بازگشتی توابع را در صفحهٔ راهنما ببینید.

man fputs
man fgets


https://stackoverflow.com/a/32366729/7508077

« آخرین ویرایش: 28 مهر 1403، 10:47 ق‌ظ توسط esmaeelE »