2011-01-11 49 views
0

我有阅读,更新和删除文件的要求。我想为此写一个类。 例如C++中的文件管理

class FileManagement { 
private: 
    fstream myFile; 

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

}; 

我的问题是在更新是有可能删除只有一条线在一个文件在C++中,应该是便携式的,如果可能的话,我们如何才能做到这一点。 其他问题是如果上面的选项是不可能的,我们可以如何实现上述。

在C++中,我们如何以便携的方式删除文件。

谢谢!

+1

您的示例代码不正确C++。 delete是语言关键字,您不能将其用作成员函数名称。 – 2011-01-11 16:46:16

回答

2

你似乎一次以混淆的方式询问两个不同的问题。

  • 删除文件,使用remove功能,stdio.h找到。
  • 删除文件的一行,您必须读取整个文件并将其写回去,并删除该行。这没有库例程。标准的“安全”技术是读取整个文件,把它写回去(用你不想删除的行)新的文件在同一目录中,fsync新文件,关闭它,然后rename新文件的旧名称。如果您不关心并发读取器或计算机在操作过程中崩溃,则可以打开旧文件读/写,将其内容读取到内存中,并将文件句柄直接重写。
1

你应该看看posix标准,并找到文件操作(如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 
+1

你可以用标准的C/C++函数来做到这一点。 – 2011-01-11 15:44:28

0

大多数系统将接受POSIX兼容的声明。你总是可以定义抽象基类并创建不同的具体实现,这些实现使用你需要的任何特定于平台的指令。如果def实例化正确的具体类,你可以有一个。

+0

谢谢,但我的问题是我们如何删除C++中的文件的一行 – venkysmarty 2011-01-11 15:40:16

+0

是的,你阅读使用流的所有数据操纵你的数据并写回来。这是最简单的方法。 – rerun 2011-01-12 23:34:24

7

我建议Boost Filesystem.

其描述如下: “升压文件系统库提供便携式设备进行查询和操作路径,文件和目录。”

0

如果你正在寻找一个更高级别的C++库,面向对象的,可以同时处理文件名操作和文件I/O,POCO是一个不错的选择:

http://pocoproject.org

ACE是一个老式的,经过测试的框架,包含大量的I/O支持。它通常用于这是非常好的CORBA的支持,但有很多有:

http://www.cs.wustl.edu/~schmidt/ACE-overview.html

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

http://qt.nokia.com/

如果你不想在另一个框架带来的,我会建议使用您自己的文件I /使用boost ::文件系统,无论是标准的iostream或标准输入输出功能输出类。您可以使用上述框架中的接口作为参考,但您也需要熟悉现代C++设计,如Boost所示,并在Modern C++ Design中进行了解释。