fread
من cppreference.com
<tbody>
</tbody> <tbody class="t-dcl-rev ">
</tbody><tbody> </tbody>| معرفة في ملف <stdio.h>
|
||
size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); |
(حتى C99) | |
size_t fread( void *restrict buffer, size_t size, size_t count, FILE *restrict stream ); |
(منذ C99) | |
تقرأ كحد أقصى عدد count من الكائنات من تيار الإدخال المعطى stream وتخزنها في المصفوفة buffer كما لو تم استدعاء fgetc عدد size من المرات لكل كائن مع تخزين الناتج في مصفوفة عناصرها unsigned char.
يتم تزويد علامة موضع الملف بعدد الحروف المقروءة.
عند حدوث خطأ, تكون علامة موضع الملف غير محدد القيمة. في حالة قراءة جزء من عنصر تكون قيمته غير محددة.
المعطيات
| buffer | - | مؤشر إلى مصفوفة سيتم تخزين الكائنات المقروءة فيه |
| size | - | حجم كل كائن بالبايت |
| count | - | عدد الكائنات التي سيتم قراءتها |
| stream | - | تيار البيانات المراد القراءة منه |
القيمة المُرجعة
عدد الكائنات التي نجحت عملية قراءتها. ربما تكون القيمة أقل من count في حالة حدث خطأ أو انتهاء الملف قبل الأوان.
إذا كانت size أو count بصفر, تكون المُرجعة صفر ولا يتم إجراء أي عمليات.
مثال
قم بتشغيل هذا الكود:
#include <stdio.h>
enum { SIZE = 5 };
int main(void)
{
double a[SIZE] = {1.,2.,3.,4.,5.};
FILE *fp = fopen("test.bin", "wb"); // must use binary mode
fwrite(a, sizeof *a, SIZE, fp); // writes an array of doubles
fclose(fp);
double b[SIZE];
fp = fopen("test.bin","rb");
size_t ret_code = fread(b, sizeof *b, SIZE, fp); // reads an array of doubles
if(ret_code == SIZE) {
puts("Array read successfully, contents: ");
for(int n = 0; n < SIZE; ++n) printf("%f ", b[n]);
putchar('\n');
} else { // error handling
if (feof(fp))
printf("Error reading test.bin: unexpected end of file\n");
else if (ferror(fp)) {
perror("Error reading test.bin");
}
}
}
الخرج:
1.000000 2.000000 3.000000 4.000000 5.000000
أنظر أيضا
| تقرأ مدخل منسق من stdin أو تيار ملف (FILE*) أو مصفوفة (دالة) | |
| تقرأ سلسلة من الحروف من تيار ملف (دالة) | |
| تكتب في ملف (دالة) | |
مقالة مرجع C++ عن fread
| |