0

最初はLinuxでプロジェクトを構築し、ストリームを中心に構築しました。

Windowsに移行し始めたとき、いくつかの問題が発生しました。
UTF-16エンコーディングで開きたいファイルの名前があります。 ここに画像の説明を入力してください

私はfstreamを使用してそれをやろうとしています:

QString source;  // content of  source  is shown on image
char *op= (char *) source.data();
fstream stream(op, std::ios::in | std::ios::binary);

ただし、ファイルを開くことはできません。
確認すると、

 if(!stream.is_open())
   {}  // I always get that  it's not opened. But file indeed exists.

私はwstreamでそれをやろうとしました。ただし、wstreamはchar *のみを受け入れるため、結果は同じです。私が理解しているように、char *として送信される文字列は、最初のゼロの後で切り捨てられ、ファイル名の1つのシンボルのみが送信されるため、ファイルが見つかりません。Vissual studioのwfstreamが名前としてwchar_t*行を受け入れることができることは知っていますが、私の選択したコンパイラーはMinGWであり、wstringコンストラクター用のそのような署名はありません。

STLストリームでそれを行う方法はありますか?

さらに
、その文字列はASCII記号だけでなく、ロシア語、ドイツ語、中国語の記号を同時に含む可能性があります。ASCIIまたはローカルエンコーディングだけに制限したくありません。

次の追加
また、ASCIIだけでなく、データも異なる可能性があります。そうでない場合は、Unicodeをまったく気にしません。例えば

ここに画像の説明を入力してください

前もって感謝します!

4

3 に答える 3

3

Boost ::Filesystem、特にfstream.hppヘッダーが役立つ場合があります。

于 2013-01-28T18:54:09.760 に答える
3

MSVC を使用していて、それが C++ 標準ライブラリの実装である場合、次のように動作するはずです。

QString source;  // content of  source  is shown on image
wchar_t *op= source.data();
fstream stream(op, std::ios::in | std::ios::binary);

これが機能するのは、Microsoft C++ の実装には、fstream をワイド文字列で開くことを許可する拡張機能があるためです。

于 2013-01-28T20:07:24.260 に答える
0

ファイル名を fstream に渡す前に、CP_ACP でWideCharToMultiByteを使用して UTF-16 文字列を変換します。

于 2013-01-28T18:58:48.180 に答える