掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
WideString(Unicode)をTMemoryStreamに展開したい (ID:42668)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
WideString(Unicode)をTMemoryStreamに展開する方法がわかりません。 以下のコードを書いて試していますが、上手くファイル出力できません。 (ゴミが入ってしまう?) procedure OutFile_UNI(OutputContent, OutputFileName : WideString); var Buffer: PByte; len : dWord; msIn : TMemoryStream; fsOut : TFileStream; endFlg: Boolean; begin //**** ここがうまくいかない? **** // WideStringの値をTMemoryStreamに保持する msIn := TMemoryStream.Create; msIn.Write(PWChar(OutputContent)^, Length(OutputContent)*sizeof(PWChar) ); msIn.Position := 0; //********************************** fsOut:= TFileStream.Create(OutputFileName, fmCreate); try GetMem(Buffer, 512); repeat endFlg := (msIn.Position >= msIn.Size); if endFlg then break; len := msIn.Read(Buffer^, 512); // **** バッファ(Buffer)に対する加工処理 **** fsOut.Write(Buffer^, len); until endFlg; FreeMem(Buffer, 512); finally msIn.Free; fsOut.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var strTmp : WideString; begin strTmp := '文字列を書き込み!'+#13#10+'書き込みテストです'; // [NG] Unicodeファイルの出力 OutFile_UNI(strTmp, 'unicode.txt'); end; TMemoryStreamからTFileStreamにバッファを格納しているのは、特別なバッファ処理があるためで、単にUnicode文字列をファイル出力したいのではありません。 ですので何とかWideStringの値をTMemoryStreamに格納したい次第です。 ちなみにString(SJIS)の場合は上手く行きました。 procedure OutFile_SJIS(OutputContent, OutputFileName : String); var Buffer: PByte; len : dWord; msIn : TMemoryStream; fsOut : TFileStream; endFlg: Boolean; begin // Stringの値をTMemoryStreamに保持する msIn := TMemoryStream.Create; msIn.Write(PChar(OutputContent)^, Length(OutputContent) ); msIn.Position := 0; fsOut:= TFileStream.Create(OutputFileName, fmCreate); try GetMem(Buffer, 512); repeat endFlg := (msIn.Position >= msIn.Size); if endFlg then break; len := msIn.Read(Buffer^, 512); // **** バッファ(Buffer)に対する加工処理 **** fsOut.Write(Buffer^, len); until endFlg; FreeMem(Buffer, 512); finally msIn.Free; fsOut.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var strTmp : String; begin strTmp := '文字列を書き込み!'+#13#10+'書き込みテストです'; // [OK] SJISファイルの出力 OutFile_SJIS(strTmp, 'unicode.txt'); end; 環境はTurbo Delphiです。 すみませんが、お知恵をお借り出来れば幸いです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.