จะเขียน std :: string ไปยังไฟล์ได้อย่างไร


89

ฉันต้องการเขียนstd::stringตัวแปรที่ฉันยอมรับจากผู้ใช้ไปยังไฟล์ ฉันลองใช้write()วิธีนี้แล้วมันเขียนไปที่ไฟล์ แต่เมื่อฉันเปิดไฟล์ฉันเห็นกล่องแทนที่จะเป็นสตริง

สตริงเป็นเพียงคำเดียวที่มีความยาวตัวแปร เป็นstd::stringที่เหมาะสมสำหรับการนี้หรือฉันควรใช้อาร์เรย์ตัวอักษรหรือบางสิ่งบางอย่าง

ofstream write;
std::string studentName, roll, studentPassword, filename;


public:

void studentRegister()
{
    cout<<"Enter roll number"<<endl;
    cin>>roll;
    cout<<"Enter your name"<<endl;
    cin>>studentName;
    cout<<"Enter password"<<endl;
    cin>>studentPassword;


    filename = roll + ".txt";
    write.open(filename.c_str(), ios::out | ios::binary);

    write.put(ch);
    write.seekp(3, ios::beg);

    write.write((char *)&studentPassword, sizeof(std::string));
    write.close();`
}

3
กรุณาแสดงรหัสของคุณ โดยทั่วไปถ้าใช้อย่างถูกต้องstd::stringก็ใช้ได้
ไร้ประโยชน์

2
คุณต้องบันทึกเนื้อหา 'น้ำหนักบรรทุก' ของสตริงไม่ใช่วัตถุสตริงเช่นนี้ (ซึ่งโดยปกติจะมีเพียงความยาวและตัวชี้ไปยังเนื้อหาจริง)
Mats Petersson

คำตอบ:


124

คุณกำลังเขียนข้อมูลไบนารีในstring-object ไปยังไฟล์ของคุณ ข้อมูลไบนารีนี้อาจประกอบด้วยเพียงตัวชี้ไปยังข้อมูลจริงและจำนวนเต็มแทนความยาวของสตริง

หากคุณต้องการเขียนลงในไฟล์ข้อความวิธีที่ดีที่สุดในการดำเนินการนี้น่าจะเป็นการofstreamใช้ "ไฟล์นอกสตรีม" มันทำงานเหมือนstd::coutกันทุกประการ แต่ผลลัพธ์จะถูกเขียนลงในไฟล์

ตัวอย่างต่อไปนี้อ่านสตริงหนึ่งจาก stdin output.txtแล้วเขียนข้อความนี้ไปยังแฟ้ม

#include <fstream>
#include <string>
#include <iostream>

int main()
{
    std::string input;
    std::cin >> input;
    std::ofstream out("output.txt");
    out << input;
    out.close();
    return 0;
}

โปรดทราบว่าที่out.close()นี่ไม่จำเป็นอย่างเคร่งครัด: ตัวถอดรหัสofstreamสามารถจัดการสิ่งนี้ให้เราได้ทันทีที่outอยู่นอกขอบเขต

สำหรับข้อมูลเพิ่มเติมโปรดดู C ++ - อ้างอิง: http://cplusplus.com/reference/fstream/ofstream/ofstream/

ตอนนี้ถ้าคุณต้องการเขียนลงไฟล์ในรูปแบบไบนารีคุณควรทำสิ่งนี้โดยใช้ข้อมูลจริงในสตริง string::c_str()วิธีที่ง่ายที่สุดที่จะได้รับข้อมูลนี้จะใช้ คุณสามารถใช้:

write.write( studentPassword.c_str(), sizeof(char)*studentPassword.size() );

4
ฉันต้องเพิ่ม std :: ios :: binary เพื่อให้สิ่งนี้ไม่มีปัญหากับอักขระขึ้นบรรทัดใหม่
Waddles

21

สมมติว่าคุณกำลังใช้ a std::ofstreamto write to file ตัวอย่างต่อไปนี้จะเขียน a std::stringto file ในรูปแบบที่มนุษย์อ่านได้:

std::ofstream file("filename");
std::string my_string = "Hello text in file\n";
file << my_string;

0

ลบออกios::binaryจากโหมดของคุณในสตรีมของคุณและใช้studentPassword.c_str()แทน(char *)&studentPasswordในไฟล์write.write()

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.