2017-05-01 7 views
0

私が間違っていることを知りたいのですが。私は、内容が:c:\ users \ documents \ file \ folder \ myfile.txtのファイル(file.tmp)を持っています。私はこのコードでtmpファイルを読みたい:Cantはifstream経由でtmpファイルを読み込んでいるようです。

std::ifstream istream(csTempPath); 
    std::string s; 
    if (istream.is_open()){ 
      int i = 1; 
      while (std::getline(istream, s)) 
      { 
       CString cs; 
       cs.Format(L"Reading: %s", s); 

       OutputDebugString(cs); 
       i++; 
      } 
      istream.close(); 
     } 
    else{ 
      OutputDebugString(L"Could not read the temp file."); 
    } 

Imが取得出力はこれです:

[4376] Reading: ?? 
[4376] Reading: ?? 

私はそれがこの得ることを期待:c:\users\documents\file\folder\myfile.txtが、私はそれを取得し、いくつかの理由のために、私は様々な方法を試しましたが、私は何が間違っているか知っているようです。 BTW初心者のプログラマー。

+2

'CString :: Format'は' std :: string'ではなく '%s'の' const char * 'を想定しています。 's.c_str()'が必要です。 –

+0

私はそれに行きます。 – Chopnut

+0

@RogerLipscombeそれは働いた。ちょうど別のフォローアップの質問、返されたファイルパスも "???"最後の "c:\ users \ documents \ file \ folder \ myfile.txt"にあります。ちょうど奇妙に見える。それにもかかわらず私は答えを得た。 – Chopnut

答えて

2

%s書式指定子は、(あなたの文字エンコーディングの設定に応じて、またはconst wchar_t*const char*を見込んで、まだあなたがstd::stringオブジェクトを渡しています。

CStringA cs; 
cs.Format("Reading: %s", s.c_str()); 

OutputDebugStringA(cs); 

あるいは、Unicodeの文字エンコーディングを使用して(あなたがのように見えるよう):後者はMicrosoft固有の拡張を使用していること

CStringW cs; 
cs.Format(L"Reading: %S", s.c_str()); 

OutputDebugStringW(cs); 

注意、形式あなたはそのc_strメンバーを起動する必要がありますANSIエンコーディングとUnicodeの間の文字エンコーディング変換を実行する指定子型%Sです。

関連する問題