5
#include "stdafx.h"
#include <string>
#include <windows.h>
using namespace std;

int main()
{
    string FilePath = "C:\\Documents and Settings\\whatever";
    CreateDirectory(FilePath, NULL);
return 0;
}

エラー:エラーC2664:'CreateDirectory':パラメータ1を'constchar*'から'LPCTSTR'に変換できません

  1. この変換を行うにはどうすればよいですか?
  2. 次のステップは、今日の日付を文字列または文字として設定し、ファイルパスと連結することです。これにより、ステップ1の実行方法が変わりますか?
  3. 私はデータ型と変換がひどいです、そこに5歳の人のための良い説明はありますか?
4

2 に答える 2

5

std::stringcharベースのデータを保持するクラスです。std::stringAPI関数にデータを渡すには、そのc_str()メソッドを使用しchar*て、文字列の実際のデータへのポインタを取得する必要があります。

CreateDirectory()入力としてを取りTCHAR*ます。UNICODEが定義されている場合はにTCHARマップされwchar_t、そうでない場合はchar代わりににマップされます。固執する必要があるstd::stringが、コードを認識させたくない場合は、代わりに次のようにUNICODE使用します。CreateDirectoryA()

#include "stdafx.h"
#include <string>
#include <windows.h>

int main()
{
    std::string FilePath = "C:\\Documents and Settings\\whatever";
    CreateDirectoryA(FilePath.c_str(), NULL);
    return 0;
}

このコードをTCHAR認識させるには、代わりに次のようにします。

#include "stdafx.h"
#include <string>
#include <windows.h>

int main()
{
    std::basic_string<TCHAR> FilePath = TEXT("C:\\Documents and Settings\\whatever");
    CreateDirectory(FilePath.c_str(), NULL);
    return 0;
}

ただし、AnsiベースのOSバージョンは古くからあり、現在はすべてUnicodeです。 TCHAR新しいコードではもう使用しないでください:

#include "stdafx.h"
#include <string>
#include <windows.h>

int main()
{
    std::wstring FilePath = L"C:\\Documents and Settings\\whatever";
    CreateDirectoryW(FilePath.c_str(), NULL);
    return 0;
}
于 2013-01-17T02:05:01.423 に答える
0

Unicode実行可能ファイルを作成していない場合はc_str()、std :: stringを呼び出すと、 ()const char*に渡すことができる(別名非Unicode LPCTSTR)が生成されますCreateDirectory

コードは次のようになります。

CreateDirectory(FilePath.c_str(), NULL):

Unicode実行可能ファイルをビルドしようとすると、コンパイルエラーが発生することに注意してください。

追加する必要がFilePathある場合は、引き続きMicrosoftを使用するstd::stringか、Microsoftを使用CStringして文字列操作を行うことをお勧めします。これは、Cの方法で実行し、rawchar*をジャグリングするよりも苦痛が少ないためです。個人的にはstd::string、CStringを使用するMFCアプリケーションを既に使用している場合を除いて使用します。

于 2013-01-17T01:56:14.210 に答える