◀ANSI版開発トップへ
  • 1833 ファイル保存のバグ
    • 1837 RE: ファイル保存のバグ
      • 1842 Re2: ファイル保存のバグ
        • 1843 Re3: ファイル保存のバグ
          • 1844 Re4: ファイル保存のバグ
            • 1845 Re5: ファイル保存のバグ
  • [1833] ファイル保存のバグ みく 2002年04月09日 18:19


    Flushをしないとタイムスタンプが正しくなく、
    またm_FileTimeに保存される情報はGetFileTimeで取得した情報です。

    CDocLineMgr.cpp:WriteFile():1020行付近
    FlushFileBuffers(hFile); //追加
    if( ::GetFileTime( (HANDLE)hFile, NULL, NULL, pFileTime ) ){
    // ::FileTimeToLocalFileTime( pFileTime, pFileTime ); //削除
    • [1837] RE: ファイル保存のバグ みく 2002年04月10日 18:17


      フラッシュするだけでは不十分でした。
      (フラッシュしてもマシンによっては更新後の時刻が取得できません。)

      よって、いったんハンドルをクローズしてから再オープンする
      必要があります。

      dwFileAttribute = ::GetFileAttributes(pszPath);
      if ( dwFileAttribute == (DWORD)-1 )
      {
      dwFileAttribute = FILE_ATTRIBUTE_NORMAL;
      }
      hFile = ::CreateFile(
      pszPath, // 開くファイル名
      GENERIC_READ, // 読み込みモードで開く。
      0, // 共有しない。
      NULL, // ハンドルを継承しない。
      OPEN_EXISTING, // 存在するファイルを開く。
      dwFileAttribute, // ファイル属性。
      NULL // テンプレートファイルを使わない。
      );
      if ( hFile != INVALID_HANDLE_VALUE )
      {
      ::GetFileTime( (HANDLE)hFile, NULL, NULL, pFileTime );
      ::CloseHandle(hFile);
      }
      • [1842] Re2: ファイル保存のバグ やざき 2002年04月11日 18:11

        ▼ みくさん
        この修正はどこに差し込めばよいの?
        ssrc_2002-04-08.zipからの再patch切望~。(すみません)
        • [1843] Re3: ファイル保存のバグ みく 2002年04月11日 22:07


          kinsoku0410.zip
          として置いてあります。このファイルの中の
          file_write_time.diff
          が、このバグの修正部分です。
          (禁則部分は4/9から修正はありません)

          このバグは、排他制御なし+更新監視の設定で上書き保存すると
          再現します。
          • [1844] Re4: ファイル保存のバグ やざき 2002年04月11日 23:45

            ▼ みくさん
            >
            > kinsoku0410.zip
            > として置いてあります。このファイルの中の
            > file_write_time.diff
            > が、このバグの修正部分です。
            > (禁則部分は4/9から修正はありません)
            >
            > このバグは、排他制御なし+更新監視の設定で上書き保存すると
            > 再現します。

            いただきましたー。パッチをあてましたが起動できずです。

            void CEditView::OnPaint( HDC hdc, PAINTSTRUCT *pPs, BOOL bUseMemoryDC )
            の
            int nMaxRollBackLineNum = 260 / TypeDataPtr->m_nMaxLineSize + 1;
            で、Divide by 0でした。ぬう。
            • [1845] Re5: ファイル保存のバグ やざき 2002年04月11日 23:49

              ▼ やざきさん
              > void CEditView::OnPaint( HDC hdc, PAINTSTRUCT *pPs, BOOL bUseMemoryDC )
              > の
              > int nMaxRollBackLineNum = 260 / TypeDataPtr->m_nMaxLineSize + 1;
              > で、Divide by 0でした。ぬう。

              ああ、ひらめきました。
              const unsigned int uShareDataVersion = 27;
              の数字をあげときますね。