2012-09-22 63 views
3

我必須寫在C++ CreateFile函數我寫了這一點,但沒有奏效WinAPI的CreateFile函數

#include <iostream> 
#include <windows.h> 
#include <string> 
using namespace std; 

int main() 
{ 
    HANDLE hfile = CreateFile(
      ".\temp.txt",    // "\\.\C:" 
      GENERIC_READ, 
      0, 
      NULL, 
      CREATE_NEW, 
      FILE_ATTRIBUTE_NORMAL, 
      NULL); 

    //if (hFile == INVALID_HANDLE_VALUE) cout << "Unable to create file \n"; 
    return 0; 
} 

錯誤C2664: 'CreateFileW':無法從「爲const char [轉換參數1 10]'到'LPCWSTR'

我該如何解決這個錯誤?

+0

與使用寬字符串一樣,您也希望擺脫該標籤字符'\ t'。使用'L'。\\ temp.txt「' –

+0

我投票重新開放,因爲這實際上一次又一次出現。 (事實上​​,我發現這是爲了將一個新問題作爲一個副本來尋找一個例子)。我是「太本地化」的粉絲,但事實並非如此。 –

+0

@AdrianMcCarthy你如何投票?你必須成爲主持人嗎? – Penn

回答

5

錯誤消息告訴您它正在嘗試呼叫CreateFileW這是寬字符版本的CreateFile。你需要傳遞一個寬字符而不是普通的字符;

hfile = CreateFile(
     L".\\temp.txt",    // Notice the L for a wide char literal 
     GENERIC_READ, 
     0, 
     NULL, 
     CREATE_NEW, 
     FILE_ATTRIBUTE_NORMAL, 
     NULL); 

更多信息can be found here

+0

我怎麼寫一些數據到temp.txt? (更改GENERIC_READ - > GENERIC_WRITE) – asdf

+0

@ user1394489通常使用[WriteFile](http://msdn.microsoft.com/en-us/library/windows/desktop/aa365747(v = vs.110).aspx),它將寫入文件句柄CreateFile返回。 –

+0

這個代碼編譯沒有錯誤,但它好好嘗試創建我的文件.. 的#include 的#include 的#include 使用命名空間std; int main() { \t HANDLE hfile; \t char data [] =「一些要寫入文件的文本」; \t \t \t \t HFILE =的CreateFile( \t L 「C:\ name.txt」 \t \t \t \t \t GENERIC_WRITE, \t 0, \t \t NULL, \t CREATE_NEW, \t FILE_ATTRIBUTE_NORMAL, \t \t空值); \t/* \t如果(HFILE == INVALID_HANDLE_VALUE) \t { \t \t COUT << 「無法創建檔案\ n」; \t \t \t} \t */ return 0; } – asdf