দ্রষ্টব্য: এটি উপরে গৃহীত উত্তরের একটি পরিবর্তন।
এটি করার একটি উপায় এখানে, ত্রুটি পরীক্ষা করে সম্পূর্ণ complete
ফাইলটি যখন 1 জিআইবির চেয়ে বড় ছিল তখন আমি প্রস্থান করতে একটি আকারের পরীক্ষক যুক্ত করেছি। আমি এটি করেছি কারণ প্রোগ্রামটি পুরো ফাইলটিকে একটি স্ট্রিংয়ে রাখে যা খুব বেশি র্যাম ব্যবহার করে এবং কম্পিউটার ক্র্যাশ করতে পারে। তবে, যদি আপনি এটির যত্ন না পান তবে আপনি কেবল কোড থেকে এটিকে সরাতে পারেন।
#include <stdio.h>
#include <stdlib.h>
#define FILE_OK 0
#define FILE_NOT_EXIST 1
#define FILE_TO_LARGE 2
#define FILE_READ_ERROR 3
char * c_read_file(const char * f_name, int * err, size_t * f_size) {
char * buffer;
size_t length;
FILE * f = fopen(f_name, "rb");
size_t read_length;
if (f) {
fseek(f, 0, SEEK_END);
length = ftell(f);
fseek(f, 0, SEEK_SET);
if (length > 1073741824) {
*err = FILE_TO_LARGE;
return NULL;
}
buffer = (char *)malloc(length + 1);
if (length) {
read_length = fread(buffer, 1, length, f);
if (length != read_length) {
free(buffer);
*err = FILE_READ_ERROR;
return NULL;
}
}
fclose(f);
*err = FILE_OK;
buffer[length] = '\0';
*f_size = length;
}
else {
*err = FILE_NOT_EXIST;
return NULL;
}
return buffer;
}
এবং ত্রুটিগুলি যাচাই করতে:
int err;
size_t f_size;
char * f_data;
f_data = c_read_file("test.txt", &err, &f_size);
if (err) {
}
else {
free(f_data);
}