在 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::filesystem
:Coliru.
您需要在您的构建系统中设置适当的包含和链接器路径,以便其中任何一个在本地工作。使用文件系统最大的"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;只是为了保留输出屏幕所以我可以看到结果
大家晚上好,我正在使用 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::filesystem
:Coliru.
您需要在您的构建系统中设置适当的包含和链接器路径,以便其中任何一个在本地工作。使用文件系统最大的"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;只是为了保留输出屏幕所以我可以看到结果