尝试CreateDirectory,获取char*到LPCWSTR错误,愿意尝试另一个函数

Rae*_*Rae 9 c++ windows winapi create-directory

我已经尝试了谷歌搜索,并且基于各种具体情况有很多答案,坦率地说,我比我开始时更加困难.

事实如下:

  • 语言: C/C++
  • 操作系统: Windows
  • IDE: Visual Studio 2005
  • 我正在尝试使用CreateDirectory(在Windows的#include之后)从程序中的函数创建目录.
  • 据推测,第一个参数(路径)应该是char*.但是,当我尝试编译时,我收到以下错误:错误C2664:'CreateDirectoryW':无法将参数1从'char*'转换为'LPCWSTR'
  • 我读过的是UNICODE和ANSI之间存在某种问题.解决方案变化很大,我害怕打破重要的事情,或做一些非常愚蠢的事情.
  • 我非常愿意使用任何其他创建新目录的方法,如果存在,我不必找到其他库.
  • 我只是在comp sci中进行操作,坦率地说我不知道​​为什么通过stdio打开,关闭,编辑和以其他方式访问文件这么容易,但是对目录做任何事情(特别是制作它们并发现它们是否存在)是一种狂野鹅在互联网的街道上追逐.

请帮助我,修复当前在CreateDirectory上的尝试或使用其他东西来创建目录.

谢谢!

joh*_*ohn 11

这完全是疯了.微软有机制,从同一个代码同时支持ANSI(他们称之为)和UNICODE,因为Windows 95/8 /我是ANSI操作系统和NT/XP/Vista的等是UNICODE的操作系统.因此,如果您真的想要,您可以编写一组支持两个系统的代码,并为每个系统重新编译.

但谁对Windows 95/98/Me感兴趣?然而,这些东西带来了令人困惑的新手.

这里有牛肉,没有在Windows叫CreateDirectory函数,称为CreateDirectoryW一个UNICODE功能,并呼吁CreateDirectoryA的ANSI功能.根据您定义的编译器选项, CreateDirectory将转换为CreateDirectoryW或CreateDirectoryA.如果你最终使用CreateDirectoryW(如你evidentally所做的那样)的,你必须通过一个Unicode字符串到它,如果你使用CreateDirectoryA那么你传递一个普通的ASCII字符串.

在你的情况下最简单的事情是忘记所有这一切,只需直接调用CreateDirectoryA.

CreateDirectoryA("c:\\some\\directory", NULL);
Run Code Online (Sandbox Code Playgroud)

为什么在C++中创建目录这么难?我猜想,因为早在70年代,当C是新的时,不是每个操作系统都有目录,所以这些东西从未进入语言标准.