नोट: यह ऊपर दिए गए स्वीकृत उत्तर का एक संशोधन है।
यहाँ यह करने का एक तरीका है, त्रुटि जाँच के साथ पूरा।
जब फ़ाइल 1 GiB से बड़ी थी, तब मैंने छोड़ने के लिए एक आकार चेकर जोड़ा है। मैंने ऐसा इसलिए किया क्योंकि प्रोग्राम पूरी फाइल को एक स्ट्रिंग में रखता है जो बहुत अधिक रैम का उपयोग कर सकता है और कंप्यूटर को क्रैश कर सकता है। हालाँकि, अगर आपको इस बात की परवाह नहीं है कि आप इसे कोड से हटा सकते हैं।
#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);
// 1 GiB; best not to load a whole large file in one string
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) {
*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) {
// process error
}