如何在 C++ 或 C 中浏览文件夹?

Posted

技术标签:

【中文标题】如何在 C++ 或 C 中浏览文件夹?【英文标题】:How to browse folders in C++ or C? 【发布时间】:2011-07-12 06:57:56 【问题描述】:

我正在用 C(也用 C++)实现一个程序来使用线程对文件进行排序,我需要用 C++ 或 C 实现一个 GUI 来选择要排序的文件,而不是通过输入标准(相当于 JFileChooser在 Java 中)。你推荐什么教程?我正在阅读有关 Qt 的信息,但我对这个 IDE 不是很熟悉。如果你有任何例子会对我有很大帮助。

【问题讨论】:

您不必强制使用 Qt Creator。您也可以将其他 IDE 与 Qt 一起使用。 @elisa 有点晚了,谢谢你的时间。 【参考方案1】:

使用 QT 非常简单:

 void openFile()
  
    QFileDialog::getOpenFileName( this, tr("Open Document"), QDir::currentPath(), tr("Document files (*.doc *.rtf);;All files (*.*)"), 0, QFileDialog::DontUseNativeDialog );

    QString filename = QFileDialog::getOpenFileName( 
        this, 
        tr("Open Document"), 
        QDir::currentPath(), 
        tr("Document files (*.doc *.rtf);;All files (*.*)") );
    if( !filename.isNull() )
    
      qDebug( filename.toAscii() );
    
  

【讨论】:

【参考方案2】:

您不必为此使用带有主循环的完整 gui。 windows 和 unix 提供显示所需文件对话框的函数调用。在 Windows 上,您将调用 GetOpenFileName 或 GetSaveFileName。如果您需要跨平台的方式来执行此操作,请尝试 sourceforge 上的小文件对话框。

【讨论】:

【参考方案3】:

是的,您可以使用 QT。您可以使用 QTQDir 类来浏览文件夹,使用 QFile 类来处理文件。

有关示例,请参阅 QT doccumentaion。它有很多。

【讨论】:

【参考方案4】:

你有两个选择:

    如果你想使用QT,你应该使用QFileDialog并将Options标志设置为QFileDialog::ShowDirsOnly。

    如果您只想为 Windows 编写代码,您可以使用 FolderBrowserDialog 类,它是 Win32 的一部分。

【讨论】:

他确实建议使用 qt 所以他可能是 unix/linux 但我可能是错的 我提到QT是因为有人告诉我IDE可以轻松完成 @Jesus:Qt 是跨平台的。 @thephpdeveloper, @John_Paul 有没有办法不使用。网络? @Saurabh,我知道在 windows 中看到它是不常见的,因为 windows 已经内置了很多东西【参考方案5】:

还有 QFileSystemModel,它可以映射到 QTreeView 项目,并会通过其内部实现做很多你需要的事情。 它是多线程的,允许排序并具有许多其他不错的功能。寻找documentation here

【讨论】:

【参考方案6】:

如果排序是您的程序唯一要做的事情,并且如果它要在 unix-y 环境中使用,那么我建议将该程序制作为命令行工具并以某种脚本语言创建一个 GUI 包装器来调用该程序。它将更简单且更有用(您只需花费半个工具的价格即可获得两个工具),它还将更容易移植到其他 GUI 环境以及更易于分发。

这个 shellscript 会打开一个文件选择器对话框并运行你的程序(创造性地命名为 yoursort)(未经测试和我不习惯编写 shell 脚本,我更喜欢其他脚本语言,我确保其他 *** 贡献者可以找到很多需要改进的地方):

    #!/bin/sh

    FILE=`zenity --file-selection --title="Choose file to sort"`

    if [ $? -eq 0 ]; then
        yoursort -f "$FILE"
    fi

Zenity 是一个用于创建简单 GUI 对话框的命令行工具,它还包括一个进度对话框。

如果您想创建更高级的 GUI,请使用 tcl、Python 或 Ruby 等脚本语言。

Ruby GUI 工具包Shoes 非常容易学习,它有一个flow based layout engine(有点像网页)。您可以使用 QT 完成大多数可以做的事情(这似乎是其他答案中最喜欢的),或者至少可以完成 99% 的应用程序所需的所有事情。由于 Shoes 是作为 GTK 上的层构建的,因此它与 GTK 一样可移植,并且您可以使用已经为您布置的大部分繁重工作来扩展它(即您不必直接处理 X 服务器、字体渲染或其他疲劳之类的东西)。


这篇文章的其余部分有点主题,但由于有人因为我建议使用脚本语言而降级了我,我觉得我必须激励我为什么要编写 GUI 使用原始 C 或 C++ 几乎总是一个坏主意(除非您这样做的唯一目的是学习如何做)。

使用原始 C 或 C++ 创建 GUI 适合喜欢钉钉子穿过身体的人,当您必须更改应用程序的外观或添加新功能时尤其痛苦。使用一些脚本语言,或者作为应用程序中的内置脚本语言 [tcl、lua、guile 和 pike 被设计为易于合并到您的应用程序中],或者围绕您创建的命令行工具创建一个 GUI 包装器。

还有很多 GUI 工具包(例如 GTK、QT)可以从某种 GUI 描述文件(如 XML 文件)加载 GUI。与编写和修改原始 C 或 C++ 相比,这些文件更容易编写和修改(或使用 GUI 构建器创建和修改)。

如果速度很重要并且作为最后的手段,请使用一些高级语言为您的 GUI 生成 C 或 C++ 代码,与编写原始代码相比,更改更灵活。但是如果你这样做,你仍然需要为第一个版本的 GUI 做大部分痛苦的工作,就像你用原始 C 或 C++ 编写它一样。 TCL、M4 和 Ruby 等语言擅长这种元编程。另一个不得已是编写自己的 GUI 加载器,然后您可以使 GUI 描述文件的语法更加专业,这将使其比使用 GUI 工具包现成的 GUI 加载器更快(并且有时会提供现成的 GUI 加载器不支持的 UI 小部件),同样,这将使您更灵活地更改您的 GUI,然后用原始 C 或 C++ 对其进行编码。

PS。 QT 使用预处理器来缓解 C++ 中 GUI 编程的痛苦,但它仍然非常低级,使用起来仍然没有必要的痛苦。

【讨论】:

以上是关于如何在 C++ 或 C 中浏览文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

VS2010创建工程的时候出现了 创建或打开C++浏览数据库文件D:\C\作业系统.sdf时发生错误

XML文件内容如何读取(C或C++)

如何在自定义文件浏览对话框Qt C++中实现返回和下一步按钮

如何使用 pinvoke 将图像从 c 或 c++ 发送到 C#

问一下高手 c++dll文件如何反编译 看源代码啊????

在 Windows 中编程 C 或 C++ 时如何操作 GUID?