..
2025/11/21
幾つかの関数呼び出しで,::File_IsNothing や ::File_IsDirectory の判断を追加
::File_Is_Text ::LoadText
これらでは,直接 fopen にあたるものを呼んでいて,無駄に時間がかかっていた.
注意点 ::File_IsDirectory など filestat.hxx にある関数について
F_Stat クラスでは無効な共有名のファイルで時間がかかる.
このクラスは ::File_IsExist などでも使用しているもの.
::File_IsDirectory などを使用する時は,予め ::File_IsExist で存在の有無をチェックする必要がある.
存在チェックをしていない場合は時間がかかることがある.
2025/11/20
::WN_is_valid_share (c_tstring& path) を用意.
既にサーバをチェック済みの場合は,::WN_is_valid_share(s_share,path) で共有名が有効かどうかを判断する.
未チェックのサーバの場合は,::WN_get_valid_share を呼び出して,有効な共有名を求めている.
existff.hxx ::File_IsExist を変更
UNC の場合,::WN_is_valid_share で共有名が有効かをチェックしてから _taccess を呼び出す.
但し,これを有効にするには,App.h のリソースの直後などで WN_fnc.hxx をインクルードする必要がある.
CharFile.hxx ::FileIsExist も変更
UNC の場合,::File_IsExist を呼び出す.
残りの検討事項
現状では exe 起動後にサーバの状況が変わっても,それが反映されない.
これら以外にも,しばらく戻って来ない呼び出しがありそう.
ファイルの有無をチェックしないで,ファイルアクセスする API などを呼んでいる?
2025/11/18
::WN_File_IsExist (c_v_tstring&) を用意
新しい File_IsExist で v_bool を返す.
これはこれで意図した動作となる.
が,実際は,現状の単一のパスをチェックする動作 ::File_IsExist(LPCTSTR ...) が多い.
また,::WN_File_IsExist を複数回呼んだ場合への対応も必要.
個別にチェックするために ::WN_is_valid_share_name(path) の様なものが必要か.
2025/11/11
::NetServerGetInfo() と ::NetShareEnum() の速度
ほぼ一緒?
正しく認識できるときは 0.1 秒以内で戻ってくる.
存在しないサーバやアクセス権がないサーバの場合は,2 ~ 10 秒? 環境により大きく異なる.
::NetShareEnum を使用してチェックしてみたが...
直接 ::File_IsExist を呼び出した時とそれほど変わらない?
環境により,誤差の範囲のこともある.
⇒ ::NetServerGetInfo() や ::NetShareEnum() などの呼び出しを減らす工夫が必要.
一つずつ順に処理するのではなく,サーバや共有名でまとめて,無効の時はスキップする.
対象コードをまだ調べていないが,::File_IsExist(c_v_tstring& paths) の様なものが必要か?
2025/11/07
サーバ上の共有名を求めるため,次を呼び出せば良さそう.
::NetShareEnum(server,1,...)
オフラインファイル設定がされている場合,[Offline Share] として認識できる?
2025/11/06
::File_IsExist
環境によるのかもしれないが,共有名が存在しない( \\B660M\Publi_ )とかなりの時間がかかる( 1 分以上)ことがあった.
当然だが,共有名まで正しくて,その下のファイルなどの存在チェックは問題ない.
NetShareEnum: サーバー上のすべての共有リソースを列挙。
NetShareGetInfo: 指定した共有名の詳細情報を取得。
NetShareCheck: 共有名が有効かどうかを確認。
2025/11/05
::File_IsExist(LPCTSTR file_path) MFC 版 ::FileIsExist()
どちらも #ifdef _MSC_VER の場合,_taccess() を使用して判断している.
2025/11/04
サーバが有効かの判断
::NetServerGetInfo(LMSTR(server.c_str()),101,&buff) で可能.
戻り値が NERR_Success であれば良い.
それ以外で確認できたのは次のもの.
ERROR_ACCESS_DENIED 5 (0x 5) アクセスが拒否されました。
ERROR_BAD_NETPATH 53 (0x 35) ネットワーク パスが見つかりませんでした。
ERROR_INVALID_PARAMETER 87 (0x 57) パラメーターが正しくありません。
RPC_S_INVALID_BINDING 1702 (0x6A6) バインド ハンドルが無効です。
RPC_S_INVALID_NET_ADDR 1707 (0x6AB) ネットワーク アドレスが無効です。