在 C++ 中使用 visual studio 2012 编码制作目录

Making directory with vitual studio 2012 coding in c++

大家晚上好,我正在使用 virtual studio 2012 在 c++ 中编写图书馆管理应用程序。我已经使用 Dev c++ 编写了一些代码,但当我切换到 visual studio 时出现错误。它涉及创建文件夹并检查文件夹是否实际创建。那就是使用 dir 和 mkdir。

对于大多数文件系统函数,

Windows 和 Linux (POSIX) 不支持相同的 API。您可以使用 Microsoft 特定于平台的 APIs,例如 CreateDirectory() or use the POSIX-like versions like _mkdir().

如果您有更新的 C++ 编译器/标准库,您可以使用 experimental filesystem library that is slated to become part of standard C++, perhaps as early as C++17. If not, you can use Boost.Filesystem 从中提取标准前实验库。

这是一个使用 Boost.Filesystem 的完整的最小示例,无需修改即可在 Windows 和 Linux 上运行:

#include <iostream>
#include <boost/filesystem.hpp>

namespace fs = boost::filesystem;

int main()
{
    if( !fs::exists( "my_dir" ) )
    {
        if( fs::create_directory( "my_dir" ) )
        {
            std::cout << "Directory created!\n";
        }
    }
}

看到了运行:Coliru.

这是相同的代码,但 std::experimental::filesystemColiru.

您需要在您的构建系统中设置适当的包含和链接器路径,以便其中任何一个在本地工作。使用文件系统最大的"gotcha"是它默认抛出很多错误的异常。您可以在适当的位置设置 try/catch 块,或者传入错误代码参数以使其成为 return 状态。

#include <stdio.h>
#include <windows.h>

int main() {
    if (!CreateDirectoryA("C:\ABC123", NULL))
    {
        if (GetLastError() == ERROR_ALREADY_EXISTS)
        {
            printf("Already Exists");
        }else if (GetLastError()== ERROR_PATH_NOT_FOUND)
        {
            printf("Path not found");
        }
    }else{
        printf("Created..");
    }
}

简单的函数就可以了。

非常感谢大家,但我发现这解决了我的问题

#include <iostream>
#include <direct.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

void main( void )
{
   if( _mkdir( "\testtmp" ) == 0 )
   {
      printf( "Directory '\testtmp' was successfully created\n" );
      system( "dir \testtmp" );
      if( _rmdir( "\testtmp" ) == 0 )
        printf( "Directory '\testtmp' was successfully removed\n"  );
      else
         printf( "Problem removing directory '\testtmp'\n" );
   }
   else
      printf( "Problem creating directory '\testtmp'\n" );
   int a;
   cin >> a;
}

cin >> a;只是为了保留输出屏幕所以我可以看到结果