C++ C+中的文件管理+;

C++ C+中的文件管理+;,c++,C++,我需要读取、更新和删除文件。我想为此写一个类。 比如说 class FileManagement { private: fstream myFile; public: void read(); void update(); void delete(); }; 我的问题是,在更新的时候,可以在C++中只删除一行,如果可以的话,应该是可移植的。 另一个问题是,如果上述方案不可行,我们如何实现上述目标 C++中如何使用便携方式删除文件。 谢谢 您应该查看标准,找到

我需要读取、更新和删除文件。我想为此写一个类。 比如说

class FileManagement {
private:
    fstream myFile;

public:
    void read();
    void update();
    void delete();

};
我的问题是,在更新的时候,可以在C++中只删除一行,如果可以的话,应该是可移植的。 另一个问题是,如果上述方案不可行,我们如何实现上述目标

C++中如何使用便携方式删除文件。 谢谢

您应该查看标准,找到文件操作(如
fopen()
)。如果平台不支持posix,或者偏离了标准,您可能需要

#ifdef NONPOSIXOS1 // really, this should be a good identifier of hte OS // write code to handle the special case #else // write code to handle the posix compliant case #endif #如果def NONPOSIXOS1//真的,这应该是hte操作系统的一个很好的标识符 //编写代码来处理特殊情况 #否则 //编写代码以处理符合posix的情况 #恩迪夫
大多数系统将接受符合posix的语句。您总是可以定义抽象基类并创建不同的具体实现,以使用您需要的任何特定于平台的指令。如果def实例化了正确的具体类,那么就可以有一个

我推荐

其说明如下:
“Boost文件系统库提供了可移植的工具来查询和操作路径、文件和目录。”

为此使用标准C/C++函数fopen()、fread()、fwrite()、rename()和remove()

你似乎同时问了两个不同的问题,令人困惑

  • 要删除文件,请使用
    stdio.h
    中的函数
  • 要删除文件中的一行,必须读取整个文件,并在删除该行的情况下将其写回。没有用于此的库例程。标准的“安全”技术是读取整个文件,将其写回(不希望删除的行)同一目录中的新文件,新文件,关闭它,然后将新文件改为旧名称。如果你不关心并发阅读器或计算机在操作中间崩溃,你可以打开旧文件读/写,把它的内容读入内存,文件句柄,并直接重写。

如果你正在寻找一个面向对象的高级C++库,它既可以处理文件名操作,又可以处理文件I/O,PoCO是一个不错的选择:

ACE是一个较老的、经过战斗测试的框架,它包含大量I/O支持。它通常用于出色的CORBA支持,但有很多:

最后,还有QT。QT通常以其跨平台UI库而闻名,实际上它还包括其他几个有用的部分(包括文件管理和I/O),如果不需要,甚至不需要在UI中进行链接


如果您不想引入其他框架,我建议您使用boost::filesystem和标准iostream或stdio函数来运行自己的文件I/O类。你可以使用上面框架中的接口作为参考,但是你也希望熟悉现代C++设计,如Boost和./P>中解释的那样。谢谢,但是我的问题是如何在C++中删除一行文件。是的,你使用流读取所有数据,操作你的数据并把它写回去。这是最简单的方法。你可以用标准的C/C++函数来完成。你的示例代码不适合C++。delete是language关键字,不能将其用作成员函数名。boost::filesystem是操纵文件和目录路径的好方法,因为它以某种程度上独立于平台的方式处理字符编码。对于实际数据I/O,C++方式是使用IoSoW函数,但是来自STDIO的C函数可以提供更好的性能。@ Blue Boo::文件系统是关于文件系统操作的,而不是实际I/O文件I/O是C++标准本身的一部分。在C++中没有外部库来获取便携文件I/O。@克里斯是这样的;尽管如此,文件系统库的一小部分是一个包装器:.Blue,这些只是包装器来接受Booo::文件系统::路径类型,而不是C++标准实现的char。实际的I/O是从basic_fstream等继承的,而不是在boost中。@chris您说过boost::filesystem不包括读取/写入文件。事实证明,它是通过std::fstream实现的。所有功能都从boost::filesystem提供给最终用户。