كتابة محتويات stringstream إلى ofstream
-
11-07-2019 - |
سؤال
وأنا حاليا باستخدام std::ofstream
كما يلي:
std::ofstream outFile;
outFile.open(output_file);
وبعد ذلك أحاول تمرير كائن std::stringstream
إلى outFile
كما يلي:
GetHolesResults(..., std::ofstream &outFile){
float x = 1234;
std::stringstream ss;
ss << x << std::endl;
outFile << ss;
}
والآن لي outFile
يحتوي على أي شيء ولكن القمامة: "0012E708" المتكررة في جميع أنحاء
في GetHolesResults
أستطيع أن أكتب
outFile << "Foo" << std:endl;
ووسيتم إخراج بشكل صحيح في outFile
.
وأي اقتراح بشأن ما أفعله خطأ؟
المحلول
ويمكنك القيام بذلك، والتي لا تحتاج إلى إنشاء سلسلة. فهو يجعل دفق إخراج قرأ محتويات تيار على الجانب الأيمن (قابلة للاستخدام مع أي تيارات).
outFile << ss.rdbuf();
نصائح أخرى
إذا كنت تستخدم std::ostringstream
ويتساءل لماذا لا شيء يحصل مكتوبة مع ss.rdbuf()
ثم استخدام وظيفة .str()
.
outFile << oStream.str();
عند تمرير rdbuf stringstream إلى أسطر جديدة لساحة لا تترجم. يمكن أن تحتوي على نص الإدخال \n
تجد حتى استبدال لن ينجح. كتب القانون القديم إلى fstream والتحول إلى لخسائر stringstream ترجمة ENDL.
فما استقاموا لكم فاستقيموا بدلا إرسال ss.str();
بدلا من ss.rdbuf();
(واستخدام stringstream).
إذا كنت تستخدم ss.rdbuf()
على الشكل أعلام outFile
سيتم إعادة تقديم التعليمات البرمجية غير قابلة لإعادة الاستخدام.
أي المتصل من GetHolesResults(..., std::ofstream &outFile)
قد ترغب في إرسال شيء من هذا القبيل لعرض النتيجة في جدول:
outFile << std::setw(12) << GetHolesResults ...
... ونتساءل لماذا يتم تجاهل العرض.