如何在C++Builder中使用目录操作?
How to use directory operations in C++Builder?
我一直在用 C++Builder 创建目录。如果您检查此 here and here,我会找到适合我的案例的示例,但是当我尝试使用它们时,其中 none 对我有用!例如,以下创建目录的代码,其中已定义 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
不是 class 或命名空间。
还有一个问题,如何通过CreateDirectory(edSourcePath->Text)
传递源路径和目录名?
您看到的是 编译时 错误,而不是运行时错误。编译器找不到 TDirectory
class 的定义。你需要#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;
}
但是请注意,只有当输入 String
不是有效的格式化路径时,TDirectory::CreateDirectory()
才会抛出异常。如果实际目录创建失败,它不会抛出异常。事实上,无法用 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
return 值。因此,您可以直接调用该函数:
#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;
}
我一直在用 C++Builder 创建目录。如果您检查此 here and here,我会找到适合我的案例的示例,但是当我尝试使用它们时,其中 none 对我有用!例如,以下创建目录的代码,其中已定义 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
不是 class 或命名空间。
还有一个问题,如何通过CreateDirectory(edSourcePath->Text)
传递源路径和目录名?
您看到的是 编译时 错误,而不是运行时错误。编译器找不到 TDirectory
class 的定义。你需要#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;
}
但是请注意,只有当输入 String
不是有效的格式化路径时,TDirectory::CreateDirectory()
才会抛出异常。如果实际目录创建失败,它不会抛出异常。事实上,无法用 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
return 值。因此,您可以直接调用该函数:
#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;
}