POCO C++库学习和分析 -- 文件系统

POCO C++库学习和分析 -- 文件系统



               既然作为一个框架性的库,自然会提供对于文件系统的操作。在Poco库中,封装了一些类去完成上述操作。这些类包括了:
              1. Poco::Path

              2. Poco::File

              3. Poco::TemporaryFile

              4. Poco::DirectoryIterator

              5. Poco::Glob

              这些类在实现上并没有什么特殊的注意点,主要是不同操作系统API的调用。如果想学习API函数的话,确实是一个不错的例子。在这里将主要介绍这些类的接口和使用,主要以翻译Poco的使用文档为主。


1. Poco::Path

1.1 路径:

               1. 在不同操作系统中,指明文件和目录所在位置的标示符是不一样的。
               2. 标示符的不一致,会造成代码在不同平台之间移植的困难。
               3. Poco::Path类抽象了不同标识符之间的区别,使程序员可以把注意力集中在业务的开发上。
               4. Poco::Path类支持Windows、Unix、OpenVMS操作系统。


1.2 Poco路径简介:

                Poco中的路径包括了
               1. 一个可选的节点(node)名:
                              a) 在Windows上,这是计算机在UNC( Universal Naming Convention)路径中的名字
                              b) 在OpenVMS中,这代表一个集群系统中的节点名
                              c) 在Unix中,此名字未被使用。
               2. 一个可选的设备(device)名:
                              a) 在Windows上,这是一个驱动器盘符
                              b) 在OpenVMS上,这是存储盘符的名字
                              c) 在Unix,此名字未被使用。
               3. 一个目录名的列表
               4. 一个文件名(包括扩展名)和版本号(OpenVMS特有)

                Poco支持两种路径:
               1. 绝对路径
               以根目录为起点的描述资源的目录
               2. 相对目录
               以某一个确定路径为起点的描述资源的目录(通常这是用户的当前目录)

               相对目录可以被转换为绝对目录(反之,并不成立)。
               在Poco中路径的指向可以是一个目录也可以是一个文件。当路径指向目录时,文件名为空。

               下面是Poco中关于路径的一些例子:
    Path: C:\Windows\system32\cmd.exe
        Style: Windows
        Kind: absolute, to file
        Node Name: –
        Device Name: C
        Directory List: Windows, system32
        File Name: cmd.exe
        File Version: –

    Path: Poco\Foundation\
        Style: Windows
        Kind: relative, to directory
        Node Name: –
        Device Name: –
        Directory List: Poco, Foundation
        File Name: –
        File Version: –

    Path: \\www\site\index.html
        Style: Windows
        Kind: absolute, to file
        Node Name: www
        Device Name: –
        Directory List: site
        File Name: index.html
        File Version: –

    Path: /usr/local/include/Poco/Foundation.h
        Style: Unix
        Kind: absolute, to file
        Node Name: –
        Device Name: –
        Directory List: usr, local, include, Poco
        File Name: index.html
        File Version: –

    Path: ../bin/
        Style: Unix
        Kind: relative, to directory
        Node Name: –
        Device Name: –
        Directory List: .., bin
        File Name: –
        File Version: –

    Path: VMS001::DSK001:[POCO.INCLUDE.POCO]POCO.H;2
        Style: OpenVMS
        Kind: absolute, to file
        Node Name: VMS001
        Device Name: DSK001
        Directory List: POCO, INCLUDE, POCO
        File Name: POCO.H
        File Version: 2


1.3 类说明

               1. Poco::Path类在Poco库中代表了路径。
               2. Poco::Path类并不关心路径所指向的目标在文件系统中是否存在。这个工作由Poco::File类负责。
               3. Poco::Path支持值语义(copy函数和赋值函数),但不支持关系操作符。

                构建一个路径
               构建一个路径存在着两种方式:
               1. 从0开始构建,分别构建node、device、directory、file
               2. 通过一个包含着路径的字符串去解析

               在构建时,可以指定路径的格式:
                   a)PATH_UNIX
                   b)PATH_WINDOWS
                   c)PATH_VMS
                   d)PATH_NATIVE (根据当前系统格式判断)
                   e)PATH_GUESS (让Poco库自行判断)


               从0构造路径
               1. 创建一个空路径,使用默认的构造函数(默认情况下路径格式为"相对目录")或者构造时使用一个bool参数去指定路径格式(true = absolute, false = relative)
               2. 如果需要的话,使用下列赋值函数去设置节点和设备名
                              void setNode(const std::string& node)
                              void setDevice(const std::string& device)
               3. 添加路径名
                              void pushDirectory(const std::string& name)
               4. 设置文件名
                              void setFileName(const std::string& name)
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我会为您解析 Poco C++网络模块的 HttpServer 示例。 HttpServer 是一个用于创建 HTTP 服务器的类,可以用于处理 HTTP 请求和响应。下面是一个简单的 HttpServer 示例,它监听来自客户端的请求并返回一个简单的响应: ```cpp #include "Poco/Net/HTTPServer.h" #include "Poco/Net/ServerSocket.h" #include "Poco/Util/ServerApplication.h" #include "Poco/Net/HTTPRequestHandlerFactory.h" #include "Poco/Net/HTTPRequestHandler.h" #include "Poco/Net/HTTPServerRequest.h" #include "Poco/Net/HTTPServerResponse.h" #include <iostream> using namespace Poco::Net; using namespace Poco::Util; using namespace std; class MyRequestHandler: public HTTPRequestHandler { public: void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) { response.setChunkedTransferEncoding(true); response.setContentType("text/html"); ostream& ostr = response.send(); ostr << "<html><head><title>My 1st HTTP Server</title></head>"; ostr << "<body><h1>Hello, world!</h1></body></html>"; } }; class MyRequestHandlerFactory: public HTTPRequestHandlerFactory { public: HTTPRequestHandler* createRequestHandler(const HTTPServerRequest&) { return new MyRequestHandler; } }; class MyServerApp: public ServerApplication { protected: int main(const vector<string>&) { HTTPServer server(new MyRequestHandlerFactory, ServerSocket(8080), new HTTPServerParams); server.start(); cout << "Server started" << endl; waitForTerminationRequest(); server.stop(); cout << "Server stopped" << endl; return Application::EXIT_OK; } }; int main(int argc, char** argv) { MyServerApp app; return app.run(argc, argv); } ``` 在这个示例中,我们定义了一个 MyRequestHandler 类来处理 HTTP 请求。这个类只有一个方法 handleRequest,它接收 HTTPServerRequest 对象和 HTTPServerResponse 对象作为参数。 handleRequest 方法设置 HTTP 响应的头信息,然后通过 HTTPServerResponse 对象发送响应的正文。代码中发送的响应正文是一个简单的 HTML 页面,其中包含一个标题和一个“Hello, world!”的消息。 MyRequestHandlerFactory 类是一个工厂类,它实现了 HTTPRequestHandlerFactory 接口。当服务器接收到一个新的请求时,它调用 MyRequestHandlerFactory 的 createRequestHandler 方法来创建一个新的 MyRequestHandler 对象来处理该请求。 MyServerApp 类继承了 ServerApplication 类,它用于启动和停止 HTTP 服务器。在 main 方法中,我们创建了一个 HTTPServer 对象,并将 MyRequestHandlerFactory、ServerSocket 和 HTTPServerParams 对象传递给它。然后,我们调用 HTTPServer 对象的 start 方法来启动服务器,并调用 waitForTerminationRequest 方法来等待服务器终止请求。最后,我们调用 HTTPServer 对象的 stop 方法来停止服务器。 这就是 Poco C++网络模块中的 HttpServer 示例的解析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值