شرح - read from file c++




كيف يمكنك فتح ملف في C++؟ (4)

أريد فتح ملف للقراءة، و C ++ الطريقة. أنا بحاجة إلى أن أكون قادرا على القيام بذلك ل:

  • الملفات النصية، والتي من شأنها أن تنطوي على نوع من وظيفة خط القراءة.

  • الملفات الثنائية، والتي من شأنها أن توفر وسيلة لقراءة البيانات الخام في المخزن المؤقت char* .


هناك ثلاث طرق للقيام بذلك، اعتمادا على احتياجاتك. هل يمكن استخدام طريقة C المدرسة القديمة والدعوة فوبين / فرياد / فكلوس، أو هل يمكن استخدام مرافق C ++ فاستريم (إفستريم / أوفستريم)، أو إذا كنت تستخدم مفك، واستخدام فئة كفيل، الذي يوفر وظائف لإنجاز الفعلي ملف.

كل هذه هي مناسبة لكل من النص والثنائي، على الرغم من أن أيا منها لديها وظيفة قراءة محددة. ما كنت على الأرجح تفعل بدلا من ذلك في هذه الحالة هو استخدام فئات فاستريم (fstream.h) واستخدام مشغلي تيار (<< و >>) أو قراءة وظيفة لقراءة / كتابة كتل من النص:

int nsize = 10;
char *somedata;
ifstream myfile;
myfile.open("<path to file>");
myfile.read(somedata,nsize);
myfile.close();

لاحظ أنه إذا كنت تستخدم فيسوال ستوديو 2005 أو أعلى، قد لا تتوفر فستريم التقليدية (هناك تطبيق ميكروسوفت جديد، الذي يختلف قليلا، ولكن يحقق نفس الشيء).


تحتاج إلى استخدام ifstream إذا كنت ترغب فقط في قراءة (استخدام ofstream إلى الكتابة، أو fstream لكلا).

لفتح ملف في وضع النص، قم بما يلي:

ifstream in("filename.ext", ios_base::in); // the in flag is optional

لفتح ملف في وضع ثنائي، تحتاج فقط إلى إضافة "ثنائي" العلم.

ifstream in2("filename2.ext", ios_base::in | ios_base::binary ); 

استخدم الدالة ifstream.read() لقراءة كتلة من الأحرف (في وضع ثنائي أو نص). استخدم getline() (عالمية) لقراءة سطر كامل.


لفتح سطر ملف نصي في كل سطر وقراءته، يمكنك استخدام ما يلي:

// define your file name
string file_name = "data.txt";

// attach an input stream to the wanted file
ifstream input_stream(file_name);

// check stream status
if (!input_stream) cerr << "Can't open input file!";

// file contents  
vector<string> text;

// one line
string line;

// extract all the text from the input file
while (getline(input_stream, line)) {

    // store each line in the vector
    text.push_back(line);
}

لفتح وقراءة ملف ثنائي تحتاج إلى أن تعلن صراحة تنسيق القراءة في تيار الإدخال الخاص بك لتكون ثنائية، وقراءة الذاكرة التي لا يوجد تفسير صريح باستخدام وظيفة عضو تيار read() :

// define your file name
string file_name = "binary_data.bin";

// attach an input stream to the wanted file
ifstream input_stream(file_name, ios::binary);

// check stream status
if (!input_stream) cerr << "Can't open input file!";

// use function that explicitly specifies the amount of block memory read 
int memory_size = 10;

// allocate 10 bytes of memory on heap
char* dynamic_buffer = new char[memory_size];

// read 10 bytes and store in dynamic_buffer
file_name.read(dynamic_buffer, memory_size);

عند القيام بذلك، ستحتاج إلى #include الرأس: <iostream>


#include <iostream>
#include <fstream>
using namespace std;

void main()
{
    ifstream in_stream; // fstream command to initiate "in_stream" as a command.
    char filename[31]; // variable for "filename".
    cout << "Enter file name to open :: "; // asks user for input for "filename".
    cin.getline(filename, 30); // this gets the line from input for "filename".
    in_stream.open(filename); // this in_stream (fstream) the "filename" to open.
    if (in_stream.fail())
    {
        cout << "Could not open file to read.""\n"; // if the open file fails.
        return;
    }
    //.....the rest of the text goes beneath......
}




io