C言語関係掲示板

過去ログ

No.1279 クリップボードの内容取得時の改行コード

[戻る] [ホームページ]
No.16951

クリップボードの内容取得時の改行コード
投稿者---cherry-i(2004/09/29 19:29:33)


お世話になります。

下記コードにて、クリップボードの内容をコンソールに出力(printf)したところ問題ありませんが、
ファイルに出力(fprintf)するとそれぞれの行間に改行コード?が入ってしまいます。

コンソール出力
aaaaa
bbbbb
ccccc

ファイルへ出力:
aaaaa

bbbbb

ccccc

となってしまいます。

これらの「改行コードらしきモノ」抜きにファイルへ出力する方法を教えていただきたいのですが。
御教示いただければうれしいですm(_ _)m。

void DispClipText(void)
{
    HANDLE hText;
    char *pText;

    OpenClipboard(NULL);

    hText = GetClipboardData(CF_TEXT);
    if(hText == NULL) {
        printf("none\n");
    } else {
        pText = GlobalLock(hText);
        printf("%s\n", pText);
        GlobalUnlock(hText);
    }

    CloseClipboard();
}




No.16952

Re:クリップボードの内容取得時の改行コード
投稿者---かずま(2004/09/29 20:00:57)


> これらの「改行コードらしきモノ」抜きにファイルへ
> 出力する方法を教えていただきたいのですが。
出力ファイルをバイナリでオープンしてみてください。

    fp = fopen(filename, "wb");

うまくいったら、なぜうまくいくのかを説明してください。

ヒント
        while (*pText)
            printf(" %02x", *pText++);



No.16954

Re:クリップボードの内容取得時の改行コード
投稿者---cherry-i(2004/09/29 20:42:26)


>出力ファイルをバイナリでオープンしてみてください。

あ、うまくいきました! 本当に有り難う御座いました!

>うまくいったら、なぜうまくいくのかを説明してください。

できません。(-_-;) でも勉強します!(37歳だけど...)





No.16956

Re:クリップボードの内容取得時の改行コード
投稿者---cherry-i(2004/09/30 09:27:52)


お世話になります。

「改行コードらしきモノ」は0dと0a、つまりCRとLFでした。
テキストモードでファイルを読み込む際には、改行コードが
CR+LFに変換されるんですね。
そしてこれをコンソール出力する際はCR+LF=改行で、
ファイルに書き出す際にはCR=改行、LF=改行となってしまうのでしょうか。

text中に任意に改行のみの行を含め、これをfgetsでバッファに取り込む際に
'\n'を除外すればこの行を取り除くことが出来ますが、クリップボード経由で
付加された改行コードは'\n'にヒットしません(同じ0d 0aなのに)。