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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: 🇬🇧بریتانیای کبیر🇬🇧 در 27 مهر 1403، 09:21 ب‌ظ

عنوان: نحوه نوشتن و خواندن یک پرونده در زبان C(حل شد)
ارسال شده توسط: 🇬🇧بریتانیای کبیر🇬🇧 در 27 مهر 1403، 09:21 ب‌ظ
 در همه جا خواندم که در تابع fopen، اگه در حالت باز شدن پرونده +r یا +w بزنیم میشه هم خواند و هم نوشت ولی این اتفاق نمیفته.
چطور میشه با یک بار باز کردن پرونده هر دو کارو کرد؟
عنوان: پاسخ : نحوه نوشتن و خواندن یک پرونده در زبان C
ارسال شده توسط: nixoeen در 27 مهر 1403، 10:10 ب‌ظ
FILE *f;
f = fopen("/file/path","w+");
عنوان: پاسخ : نحوه نوشتن و خواندن یک پرونده در زبان C
ارسال شده توسط: 🇬🇧بریتانیای کبیر🇬🇧 در 27 مهر 1403، 10:17 ب‌ظ
این رو آزمایش کردم، جواب نمیده. فقط میشه خواند ازش.

به عنوان مثال کد زیر را آزمایش کنید. باید اول در پرونده 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;
}
عنوان: پاسخ : نحوه نوشتن و خواندن یک پرونده در زبان C
ارسال شده توسط: esmaeelE در 28 مهر 1403، 09:52 ق‌ظ
نکته اینجاست وقتی روی فایل می‌نویسید اشاره‌گر به جلو حرکت می‌کند.
برای اینکه بتوانید از ابتدای فایل بخوانید باید اشاره‌گر فایل را به ابتدای فایل برگردانید. برای این‌کار می‌تونید از تابع 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