Как использовать операции с каталогами в C++Builder?
Я застрял в создании каталога с помощью C++Builder. Если вы проверите это здесь и здесь, я найду примеры для своего случая, но когда я пытаюсь их использовать, ни один из них не работает для меня! Например, следующий код для создания каталога, где 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)
?
1 ответ
То, что вы видите, это ошибка времени компиляции, а не ошибка времени выполнения. Компилятор не может найти определение 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;
}