बनाने के लिए मैं एक परियोजना के लिए एक FileManager उपयोग कर रहा हूँ ताकि पढ़ने और लिखने मेरे लिए एक परेशानी का कम है विफल रहता है। या होगा, अगर मैंने इस बार इसे डिबगिंग नहीं किया था। तो, इस आराम वर्ग ने वास्तव में मुझे तनाव और समय का कारण बना दिया। बहुत बढ़िया।Fstream नई फ़ाइल
समस्या fstream
हो रहा है। आगे बढ़ने से पहले, यहां मेरी फ़ाइल प्रबंधक श्रेणी की संरचना है।
class FileManager : Utility::Uncopyable
{
public:
FileManager();
void open(std::string const& filename);
void close();
void read(std::string& buffer);
void write(std::string const& data);
private:
std::fstream stream_;
};
बहुत आसान। बफर को फ़ंक्शन फ़ंक्शन के दौरान डेटा के साथ लोड किया जाता है, डेटा पैरामीटर फ़ाइल में लिखा जाना है। पढ़ने और लिखने से पहले आपको फ़ाइल को खोलना होगा या अपने चेहरे में एक बड़ा, वसा अपवाद प्राप्त करना होगा। जैसा कि मैं अब प्राप्त कर रहा हूं।
परिदृश्य: एक उपयोगकर्ता के सरल कमांड लाइन पंजीकरण, तो फाइल करने के लिए डेटा लेखन। मैं एक नाम और पासवर्ड मांगता हूं। नाम कॉपी किया गया है और .txt (फ़ाइल नाम) के साथ जोड़ा गया है। तो ऐसा लगता है:
void SessionManager::writeToFile(std::string const& name,
std::string const& password)
{
std::string filename = name + ".txt";
std::string data;
data += name +", " +password;
try
{
fileManager_->open(filename);
fileManager_->write(data);
fileManager_->close();
}
catch(FileException& exception)
{
/* Clean it up. */
std::cerr << exception.what() << "\n";
throw;
}
}
समस्या: खुला विफल रहता है। फ़ाइल कभी नहीं बनाई गई है, और लिखने के दौरान मुझे खुली फ़ाइल नहीं होने के लिए अपवाद मिलता है।
FileManager :: खुला() फ़ंक्शन:
void FileManager::open(std::string const& filename)
{
if(stream_.is_open())
stream_.close();
stream_.open(filename.c_str());
}
और लिखने
void FileManager::write(std::string const& data)
{
if(stream_.is_open())
stream_ << data;
else
throw FileException("Error. No file opened.\n");
}
हालांकि, अगर मैं फ़ाइल पहले से बनाते हैं, तो यह फ़ाइल खोलने कोई मुसीबतों है। फिर भी, जब मैं जांचता हूं, तो डिफ़ॉल्ट std::ios::openmode
std::ios::in | std::ios::out
है। जब मैं केवल std::ios::out
टैग करता हूं, तो मैं फ़ाइल को ठीक बना सकता हूं, लेकिन मैं स्ट्रीम को पढ़ने/लिखने की स्थिति में रखना चाहता हूं।
मैं इसे कैसे पूरा कर सकता हूं?
चूंकि सी ++ 11, 'ios_base :: ऐप 'स्वयं ही अनुमति है, और" ए "के बराबर है। अद्यतन तालिका के लिए सी ++ 11 या सी ++ 14 में तालिका 132 देखें। –