如何在C++Builder中使用目录操作?

问题描述 投票:0回答:2

我陷入了用 C++Builder 创建目录的困境。如果你检查这个herehere,我会找到适合我的案例的示例,但是当我尝试使用它们时,它们都不适合我!例如,以下创建目录的代码,其中已定义

edSourcePath->Text
值。

不幸的是,文档不完整。

try
{
    /* Create directory to specified path */
    TDirectory::CreateDirectory(edSourcePath->Text);
}
catch (...)
{
    /* Catch the possible exceptions */
    MessageDlg("Incorrect path", mtError, TMsgDlgButtons() << mbOK, NULL);
    return;
}

错误消息显示

TDirectory
不是类或命名空间。

还有一个问题,如何通过

CreateDirectory(edSourcePath->Text)
传递源路径和目录名?

directory c++builder c++builder-10.2-tokyo
2个回答
2
投票

您看到的是编译时错误,而不是运行时错误。编译器找不到

TDirectory
类的定义。您需要
#include
定义
TDirectory
的头文件,例如:

#include <System.IOUtils.hpp> // <-- add this!

try
{
    /* Create directory to specified path */
    TDirectory::CreateDirectory(edSourcePath->Text);

    // or, if either DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE or
    // NO_USING_NAMESPACE_SYSTEM_IOUTILS is defined, you need
    // to use the fully qualified name instead:
    //
    // System::Ioutils::TDirectory::CreateDirectory(edSourcePath->Text);
}
catch (const Exception &e)
{
    /* Catch the possible exceptions */
    MessageDlg("Incorrect path.\n" + e.Message, mtError, TMsgDlgButtons() << mbOK, NULL);
    return;
}

但请注意,仅当输入

TDirectory::CreateDirectory()
不是有效的格式化路径时,
String
才会引发异常。如果实际目录创建失败,它不会引发异常。事实上,无法用
TDirectory::CreateDirectory()
本身来检测该情况,您必须事后用
TDirectory::Exists()
检查:

#include <System.IOUtils.hpp>

try
{
    /* Create directory to specified path */
    String path = edSourcePath->Text;
    TDirectory::CreateDirectory(path);
    if (!TDirectory::Exists(path))
        throw Exception("Error creating directory");
}
catch (const Exception &e)
{
    /* Catch the possible exceptions */
    MessageDlg(e.Message, mtError, TMsgDlgButtons() << mbOK, NULL);
    return;
}

否则,

TDirectory::CreateDirectory()
只是
System::Sysutils::ForceDirectories()
的验证包装器,它有一个
bool
返回值。因此,您可以直接调用该函数:

#include <System.SysUtils.hpp>

/* Create directory to specified path */
if (!ForceDirectories(edSourcePath->Text)) // or: System::Sysutils::ForceDirectories(...), if needed
{
    MessageDlg("Error creating directory", mtError, TMsgDlgButtons() << mbOK, NULL);
    return;
}

0
投票

现在这很奇怪!... 我到处寻找我的 IOUtils,但我只能找到(对于我安装的 Borland BCB v 4(是的,v4 抱歉))一个名为“sysutils.hpp”的文件 在 C: Program Files (x86) Borland CBuilder4 Include Vcl 目录中...在其中我从 createdir 的文本搜索中找到了一个条目,因此...

`extern PACKAGE bool __fastcall CreateDir(const AnsiString Dir);`

我放置了一个按钮单击事件......

    void __fastcall TForm1::Button2Click(TObject *Sender) { CreateDir("Big"); }

这在当前目录中创建了一个名为“Big”的目录!

凯文(铁巫师)

© www.soinside.com 2019 - 2024. All rights reserved.