В настоящее время я работаю с std::fstream
и имеет следующий класс: (Обратите внимание, что файл открывается на конструкторе и должен оставаться открытым во время всех операций чтения/записи, только закрыть при разрушении).Напишите уже открытому файловому потоку и избавьтесь от остальных
MyFileClass
{
public:
MyFileClass(const std::string& file_name) { m_file.open(file_name) };
~MyFileClass() { m_file.close() };
bool read(std::string& content);
bool write(std::string& data);
private:
std::fstream m_file;
}
Теперь у меня есть некоторые примеры кода:
MyFileClass sample_file;
sample_file.write("123456");
sample_file.write("abc");
Результат будет «abc456», потому что, когда поток открыт, и мы пишем с режимом усечения он всегда будет писать на вершине, что в настоящее там.
То, что я хотел бы иметь, это очищать каждый раз, прежде чем писать, поэтому в конце у меня будет только то, что в нем самое новое, в данном случае «abc».
И текущий дизайн, если файл не существует, он будет создан только при записи, но не в read (read вернет код ошибки, если файл отсутствует).
Моя функция записи является:
bool
MyFileClass::write(const std::string& data)
{
m_file.seekg(0);
if (!m_file.fail())
{
m_file << data << std::flush;
}
return m_file.fail() ? true : false;
}
Есть ли способ, чтобы очистить текущее содержимое файла перед промывкой данных?
C++ не обеспечивает способ обрезания уже открытого файла. См. Http://stackoverflow.com/questions/20809113/how-to-truncate-a-file-while-it-is-open-with-fstream – Barmar
За исключением повторного открытия файла, нет. – UKMonkey