2010-12-12 6 views
3

テキストファイルを編集コントロールに読み込むために、TheForgerのWin APIチュートリアルに従います。時にはファイル全体が正しく読み込まれ、時には最後の部分が残っていることがあります。 'part'は2行半分、10行分です。o_Oファイルの外観は次のとおりです。C++、テキストを読み込む関数は、最後の数行を無視します。一部の.txtファイルは無視されます。

(I '新しいユーザーであるため、複数のハイパーリンクを投稿できないので、スクリーンショットがあるギャラリーはhttp://nancy.imgur.com/all/で、ギャラリーに表示される順番を参照しています)

2.5行抜け:秒(カーソルが「F」の後で停止する)

10行抜き:第4回(fの後にカーソルで停止)

完全に読んでください:firstとthird

私はfstreamsを代わりに使ってみましたが、同じものは除外されました(私は編集コントロールで新しい行の文字を表示することもできませんでした=)。どんなアイデアが間違っているのでしょうか?

BOOL LoadTextFileToEdit(HWND hEdit, LPCTSTR pszFileName) { 
HANDLE hFile; 
BOOL bSuccess = FALSE; 

hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, 
    OPEN_EXISTING, 0, NULL); 
if(hFile != INVALID_HANDLE_VALUE) 
{ 
    DWORD dwFileSize; 

    dwFileSize = GetFileSize(hFile, NULL); 
    if(dwFileSize != 0xFFFFFFFF) 
    { 
     LPSTR pszFileText; 

     pszFileText = GlobalAlloc(GPTR, dwFileSize + 1); 
     if(pszFileText != NULL) 
     { 
      DWORD dwRead; 

      if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL)) 
      { 
       pszFileText[dwFileSize] = 0; // Add null terminator 
       if(SetWindowText(hEdit, pszFileText)) 
        bSuccess = TRUE; // It worked! 
      } 
      GlobalFree(pszFileText); 
     } 
    } 
    CloseHandle(hFile); 
} 
return bSuccess; } 
+0

入力ファイルに切り捨てられた位置にASCII NUL文字(0x00バイト)が含まれている可能性はありますか? –

答えて

1

それはあなたのテキストファイルが埋め込まれたNUL文字が含まれているので、文字列pszFileTextが予想よりも早く終了している可能性がある:私はここにtheForgerのチュートリアルにリンクできませんでした

は機能ですか? SetWindowText()関数は、最初のNULターミネータに遭遇した後に読み込みを停止します。

また、ファイルから読み取るときは、dwReadが本当に読みたいバイト数であることを確認したいと思うでしょう。 dwReaddwFileSize未満の場合はどうなりますか?

+0

はい、実際に埋め込まれたNUL文字がありました、ありがとうございます! = D – Nancy

0

SetWindowTextを呼び出す前に、strlen(pszFileText)と呼び、それをdwFileSizeと比較してください。ファイルに\0があった可能性があります。

0

編集コントロールに制限がある場合があります。デフォルトでは、ユーザーが編集コントロールに入力できるテキストの量は32 KBに制限されています。あなたのテキストファイルのサイズは?

関連する問題