2011-01-03 11 views
0
TCHAR finalpath[MAX_PATH]; 
GetCurrentDirectory(MAX_PATH,finalpath); 
TCHAR filename[] = TEXT("\\lista.txt"); 
wcscat(finalpath,filename); 
wprintf(L"List will be saved to %s", finalpath); 

だから、これは基本的にfinalpathは確かである私を確認し、C:\ somepath \ lista.txt_wfreopenはc:/path/file.txtでは動作しますが、c: path file.txtでは動作しませんか?

しかし_wfreopen(TEXT(finalpath),TEXT("w"),stdout);

私はちょうど

_wfreopen(TEXT("c:/somepath/lista.txt"),TEXT("w"),stdout); 

すべてにそれを変更する場合は、正常に動作し、どうして私はfinalpath argを受け入れることができますか?

ありがとうございました

+0

_wfreopen(finalpath,TEXT("w"),stdout);を試してみてください。 'filename'文字列を追加する前にバックスラッシュを追加するには、追加の' wcscat() '呼び出しが必要です。 – thkala

+0

@thkala: 'filename'には先頭にバックスラッシュがあります。さらに、この問題は 'wprintf'出力に現れます。 –

+0

ところで:コードがANSIとUnicodeの両方で動作するようにするには、 '_tcscat'、' _tprintf'と '_tfreopen'が必要です。 –

答えて

2

変数でTEXTマクロを使用しません。私は_wfreopen(TEXT(finalpath),TEXT("w"),stdout);もコンパイルすることに驚いています。

は、私はproblesは、GetCurrentDirectoryの `によって返されたパスが()`バックスラッシュで終了していないということだと思います

+0

これ。 finalpathがTCHAR []型の場合は、それを変更する必要はありません。 TEXTはリテラルのみです。 – Puppy

+0

finalpathにはすでに正しいタイプがあります。 TEXTマクロは間違って使用されても効果はありません。あなたの答えは役に立たないと思う。 – nusi

+0

@ user47249:どのような根拠に基づいて効果がないと思いますか?コンパイラは引き続き置換を行います。参考までに、定義は '#define __TEXT(quote)L ## quote'です。実際には' Lfinalpath'という名前の変数への参照になります。コンパイルしたり、その名前の変数を誤って引っ張ったりすることはありません他の場所から。 –

関連する問題