سؤال

أقوم بتطوير تطبيق تحت Windows ، وأنا أستخدم FStreams للقراءة والكتابة إلى الملف.

أنا أكتب مع فتح fstream مثل هذا:

fs.open(this->filename.c_str(), std::ios::in|std::ios::out|std::ios::binary);

والكتابة مع هذا الأمر

fs.write(reinterpret_cast<char*>(&e.element), sizeof(T));

إغلاق الملف بعد كل كتابة

fs.close()

القراءة مع ifstream فتح مثل هذا:

is.open(filename, std::ios::in);

والقراءة مع هذا الأمر:

is.read(reinterpret_cast<char*>(&e.element), sizeof(T));

الكتابة تسير على ما يرام. ومع ذلك ، قرأت في حلقة بهذه الطريقة:

while(!is.eof())
{
  is.read(reinterpret_cast<char*>(&e.element), sizeof(T));
}

ويستمر البرنامج في القراءة ، على الرغم من أنه يجب الوصول إلى نهاية الملف. ISTellg POS هو 0 ، و GCOUNT يساوي 0 أيضًا ، لكن الفشل والبت كلاهما على ما يرام.

أنا أرغب في هذا المجنون ، وأحتاج إلى بعض المساعدة ...

هل كانت مفيدة؟

المحلول

جرب هذا:

while(is.read(reinterpret_cast<char*>(&e.element), sizeof(T))) {}

كما يجب عليك فتح istream مع ال binary العلم كذلك:

is.open(filename, std::ios::in | std:ios::binary);

إذا قرأ إلى الأبد ، فماذا يقرأ؟ ما هو نوع T؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top