Std :: স্ট্রিং ফাইল এ লিখবেন কীভাবে?


89

আমি একটি std::stringভেরিয়েবল লিখতে চাই যা আমি ব্যবহারকারী থেকে একটি ফাইলে গ্রহণ করছি accepting আমি 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();`
}

4
আপনার কোডটি দেখান সাধারণভাবে, যদি সঠিকভাবে ব্যবহৃত std::stringহয় তবে এটির জন্য ঠিক is
অকেজো

4
আপনাকে স্ট্রিংয়ের 'পেডলোড' কন্টেন্ট সংরক্ষণ করতে হবে, স্ট্রিং অবজেক্টের মতো নয় (যা সাধারণত আসল সামগ্রীর জন্য কেবল একটি দৈর্ঘ্য এবং একটি পয়েন্টার ধারণ করে)
ম্যাট পিটারসন

উত্তর:


124

আপনি বর্তমানে stringআপনার ফাইলটিতে-ববনে বাইনারি ডেটা লিখছেন । এই বাইনারি ডেটা সম্ভবত সম্ভবত প্রকৃত ডেটার একটি পয়েন্টার এবং একটি পূর্ণসংখ্যার স্ট্রিং দৈর্ঘ্য প্রতিনিধিত্ব করে।

আপনি যদি কোনও পাঠ্য ফাইলে লিখতে চান তবে এটি করার সর্বোত্তম উপায়টি সম্ভবত একটি ofstream, একটি "আউট-ফাইল-স্ট্রিম" দিয়ে। এটি ঠিক মতো আচরণ করে std::coutতবে আউটপুট কোনও ফাইলে লেখা হয়।

নিম্নলিখিত উদাহরণটি স্ট্ডিন থেকে একটি স্ট্রিং পড়ে, এবং তারপরে এই স্ট্রিংটি ফাইলটিতে লিখে 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

আরও তথ্যের জন্য, সি ++ - উল্লেখ দেখুন: http://cplusplus.com/references/fstream/ofstream/ofstream/

এখন আপনার যদি বাইনারি আকারে কোনও ফাইল লেখার প্রয়োজন হয় তবে আপনার স্ট্রিংয়ের প্রকৃত ডেটা ব্যবহার করে এটি করা উচিত। এই ডেটা অর্জনের সবচেয়ে সহজ উপায়টি ব্যবহার করা হবে string::c_str()। সুতরাং আপনি ব্যবহার করতে পারেন:

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

4
নতুন লাইনের চরিত্রগুলির সাথে সমস্যা না হওয়ার জন্য আমাকে স্ট্যান্ড :: আইওএস :: বাইনারি যুক্ত করতে হয়েছিল
ওয়েডলস

21

ধরে নিচ্ছেন যে আপনি std::ofstreamফাইলটিতে লিখতে একটি ব্যবহার করছেন , নিম্নলিখিত স্নিপেট std::stringমানব পাঠযোগ্য ফর্মটিতে একটি ফাইল লিখবে :

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.