ページ 11

fwrintfでテキストファイルに表示するには

Posted: 2010年3月17日(水) 23:06
by たこやき
fwprintfでテキストファイルに表示されないのですが。
void inEditString(TCHAR listboxstr[256][256])
{
int strcount=0,count2=0,count3=0,flag=0;
TCHAR editstr[MAX_ST[/url];
TCHAR listboxstrbuffer[256][256];

GetWindowText(editbox2,editstr,256);

fp=_wfopen(_T("Listbox2.txt"),_T("r+"));
if(fp==NULL)
{
MessageBox(hWnd,_T("ファイルが開きません。"),_T("エラー"),MB_OK);
}

while(fwscanf(fp,_T("%s"),listboxstr[strcount])!=EOF)
{
strcount++;
}
while(count2<(strcount+1))
{
if(flag==0)
{
if(wcscmp(editstr,listboxstr[count3])>=NULL)
wcscpy(listboxstrbuffer[count2],editstr);
count2++;
flag=1;
}
wcscpy(listboxstrbuffer[count2],listboxstr[count3]);
count2++;
count3++;
}
fclose(fp);
fp=_wfopen(_T("Listbox2.txt"),_T("w"));
if(fp==NULL)
{
MessageBox(hWnd,_T("ファイルが開きません。"),_T("エラー"),MB_OK);
}
strcount=0;
while(strcount<count2)
{
fwprintf(fp,_T("%s"),listboxstrbuffer[strcount]);

strcount++;
}
}
なのですが、変な変数名がありますが気にしないでください、
ブレイクポイントをfwprintf(fp,_T("%s"),listboxstrbuffer[strcount]);
の所にやったのですが、listboxstrbuffer[strcount]の所を表示させたのですが、
文字列は入っているのにそして再実行するとテキストファイルに表示されません。
なぜでしょうか?

Re:fwrintfでテキストファイルに表示するには

Posted: 2010年3月18日(木) 06:06
by たかぎ
処理系不明ですが...
ロケールの設定はどうなっていますか?

Re:fwrintfでテキストファイルに表示するには

Posted: 2010年3月18日(木) 06:53
by gazu
fwprintfの戻り値を確認してみてはどうでしょう?
もし戻り値が0より大きいならば、テキストファイルをバイナリエディタで
開いてみてはどうでしょうか?

Re:fwrintfでテキストファイルに表示するには

Posted: 2010年3月18日(木) 07:47
by たこやき
たかぎさん朝早くに回答ありがとうございます。
処理系はVC++2005です。
ローケルとは何でしょうか?
勉強不足ですみません。


gazuさん朝早くに回答ありいがとうございます。
テキストファイルで開いて見ましたが何も書かれていませんでした。
_wfopenをバイナリエディタに設定して見ましたが共有違反と書かれ開けませんでした。
なぜでしょうか?

Re:fwrintfでテキストファイルに表示するには

Posted: 2010年3月18日(木) 08:03
by たこやき
すみません。できました。
_wfopenをバイナリエディタに設定して見ましたがちゃんと表示されました。
ただプログラム終了しないと書き込まれません。
なぜでしょうか?
またファイルエディタでは開けないのでしょうか?

Re:fwrintfでテキストファイルに表示するには

Posted: 2010年3月18日(木) 08:19
by たこやき
度々すみません。バイナリで書き込んで終了して
バイナリエディタで再度開くと文字化けしてでます。(listbox2.txtで開き直すと文字化けします。)

Re:fwrintfでテキストファイルに表示するには

Posted: 2010年3月18日(木) 10:14
by たいちう
> fwprintfでテキストファイルに表示されないのですが。

> 文字列は入っているのにそして再実行するとテキストファイルに表示されません。

> _wfopenをバイナリエディタに設定して見ましたが共有違反と書かれ開けませんでした。

> _wfopenをバイナリエディタに設定して見ましたがちゃんと表示されました。

> 度々すみません。バイナリで書き込んで終了して
> バイナリエディタで再度開くと文字化けしてでます。
> (listbox2.txtで開き直すと文字化けします。)


落ち着いて何をしたいのか説明してください。正しい日本語で。
相手に伝わるかどうかを必ず読み返してから投稿してください。
UNICODEでテキストファイルに書き込みたい、ということですか?

Re:fwrintfでテキストファイルに表示するには

Posted: 2010年3月18日(木) 15:20
by たこやき
返信ありがとうございます。
>UNICODEでテキストファイルに書き込みたい、ということですか?
はい。そうです。
_wfopenをバイナリエディタ各(r+b)と(w+b)と変更しましたが
文字列がテキストファイルに書き込みされません。ファイルエディタとバイナリエディタ
どちらともなんですが、実行したあと、サイズを見ると1kbyte使っています。
このテキストファイル(rとw)のバイナリエディタで確認したら機械語0D 0A
でバイナリでやったファイル(r+bとw+b)をバイナリエディタで認したら機械語で0A 00だけ
表示されます。

Re:fwrintfでテキストファイルに表示するには

Posted: 2010年3月18日(木) 19:03
by たいちう
色々勘違いしているみたいですね。
次のコードを実行できますか?
私の環境では正常に書き込めますが。
#include <stdio.h>
#include <locale.h>

int main() {
    _wsetlocale(LC_ALL, L"");
    FILE *fp = _wfopen(L"test.txt", L"w");
    fwprintf(fp, L"てすと");
    fclose(fp);
    return 0;
}

Re:fwrintfでテキストファイルに表示するには

Posted: 2010年3月18日(木) 20:41
by たこやき
なんとか自己解決しました。
原因はわかりませんが。
回答ありがとうございました。