質問)添付ファイルの状態チェック?No.45334
tera_km さん 13/11/22 09:00
 
こんにちは、いつもお世話になります。

添付時もしくは送信時に添付ファイルが他のプロセスで開かれているかを確認するマ
クロはどこかにありますでしょうか?

ネットワークドライブのデーターを他のPCで編集中にもかかわらず、添付して送信し
てしまう事を防ぎたいのです。

仕様として、添付後に添付ファイルを開いて改変した場合には送信時に警告が出ます
が、似たようなことがが上述のケースにも適用出来ないかと言うことが主旨です。

どなたかご教授下さい。

windowsXPsp3
Ver6.13


[ ]
RE:45334 質問)添付ファイルの状態チェッNo.45336
秀まるお2 さん 13/11/22 10:47
 
> 添付時もしくは送信時に添付ファイルが他のプロセスで開かれているかを確認するマ
> クロはどこかにありますでしょうか?

 たぶんそういうマクロは無いと思います。

 ファイルが他のプロセスで使用中かどうかを調べるためには、WindowsのAPIで
あるCreateFileってAPIを呼び出してチェックするしか無いと思うのですが、現
状のマクロではそういうことは出来ないように思います。

 秀丸メールのtkinfo.dllにそういう関数を用意してマクロから呼び出せるよう
にしたらいいかと思いますが、それでいいでしょうか。例えば、

    #f = dllfunc("TestFileReadable", $file);
    if( #f != 0 ) {
        message "ファイルの読み込み不可。エラーコード = " + str(#f);
    }

    #f = dllfunc("TestFileWriteable", $file);
    if( #f != 0 ) {
        message "ファイルの書き込み不可。エラーコード = " + str(#f);
    }

 みたいなことが出来るとか。
 関数の返り値は、正常(アクセス可)なら0、アクセス不可ならWin32のエラー
コードをそのまま返すということで。

[ ]
RE:45336 質問)添付ファイルの状態チェッNo.45341
秀まるお2 さん 13/11/22 14:21
 
 今思ったのですけども、もしかして、「ファイル」メニューの「ファイルを添
付」コマンド実行時、あるいはドラッグドロップで添付しようとした時に、その
ファイルが編集中かどうか判断したいって話じゃないでしょうか。

 マクロで判定させるとしても、出来るのは「X-Attach:」ヘッダに記録された
ファイルだけなので、そうだとすると、チェック出来るのは秀丸メールのメール
データ用フォルダ配下にコピーされたファイルだけで、添付元のファイルのチェ
ックは出来ないと思います。

 あるいは、秀丸メール内部では「添付元のファイルが何だったか」ってことを
覚えているので、例えば「今すぐ送信」や「あとで送信」を実行した瞬間に、添
付元ファイルが編集中かどうかチェックしたりってことは技術的には可能ではあ
ります。


---------------------------------
 詳細説明:

  例えば「c:\data\abc.doc」ってファイルを秀丸メールに添付すると、それ
によって、「abc.doc」が、秀丸メールのデータ用フォルダ配下の「受信添付」
ってフォルダ配下にコピーされ、メールには

    X-Attach: 受信添付\xxxxxx\abc.doc

 のようなヘッダが埋め込まれる形になります。

 この「abc.doc」ファイルの元となったファイル名が「c:\data\abc.doc」だっ
たってことは、マクロからは判断不可能です。

 秀丸メール内部では、「あとで送信/今すぐ送信」の時に、元のファイルと
「受信添付」配下のファイルのタイムスタンプを比較して、

    添付ファイルのファイル名が変更されているらしいです。
    元のファイル名 = xxxx
    新しいファイル名 = xxxx
    ファイル名の変更をメール側にも反映しますか?

 みたいなメッセージを表示する機能があります。そこを少し改良して、元ファ
イルが他のアプリケーションソフトで編集中かどうか(書き込みアクセス不可か
どうか)を確認することは可能かと思います。

[ ]
RE:45341 質問)添付ファイルの状態チェッNo.45342
秀まるお2 さん 13/11/22 14:32
 
>  秀丸メール内部では、「あとで送信/今すぐ送信」の時に、元のファイルと
> 「受信添付」配下のファイルのタイムスタンプを比較して、
>
>     添付ファイルのファイル名が変更されているらしいです。
>     元のファイル名 = xxxx
>     新しいファイル名 = xxxx
>     ファイル名の変更をメール側にも反映しますか?

 すみません。これはまた別のメッセージでした。

 タイムスタンプが違う時は、

    この添付ファイルの元になったファイルは、ファイルが添付された後に
    内容が書き変わっています。送信される添付ファイルは書き変わる前の
    内容となります。書き変わった後の内容を送信したい場合は、もう一度添
    付しなおしてください。

    添付する前のファイル = XXXX.doc

 みたいなメッセージになります。

 このチェック(タイムスタンプが書き換わってるかどうかのチェック)の処理
のついでに、ファイルが書き込みアクセス可能かどうかも調べて、書き込み不可
の場合は

    この添付ファイルの元になったファイルは、現在他のアプリケーション
    ソフトによって編集中である可能性があります。かまわずに続行しますか?

    添付する前のファイル = XXXX.doc

 とか出すようにしたらいいのかなぁと思いますけども。

[ ]
RE:45342 質問)添付ファイルの状態チェッNo.45343
秀まるお2 さん 13/11/22 16:51
 
 ほとんど一人で先走りしてしまってるのですが…

 「全般的な設定・上級者向け・確認メッセージ・確認メッセージ2」

 の中に、

 「添付元ファイルが編集中の時」

 ってオプションを追加します。標準はOFFになりますが、それをONにしていた
だきますと、期待されたチェックが出来るようになると思います。

 チェックは2段階あります。

 「ファイルを添付」またはドラッグドロップで添付する時に、そのファイルが
書き込み可能かどうかチェックして、もしも「ERROR_SHARING_VIOLATION」が返
る場合は警告メッセージを表示します。

 さらに、「あとで送信」または「今すぐ送信」を実行した時にも同じチェック
をして、もしも編集中と思わしき場合は警告メッセージを表示します。

 それでたぶん期待されたことが実現できてるんじゃないかと思います。

 ということでどうでしょうか。

 もうオプション追加してしまったのですけども。(次のβ版で)

[ ]
RE:45343 質問)添付ファイルの状態チェッNo.45344
tera_km さん 13/11/25 08:55
 
こんにちは、いつもお世話になります。

> ほとんど一人で先走りしてしまってるのですが…

 いつものことですが、素早い対応ありがとうございます。投稿後、今日までアクセ
スしておりませんで気づきませんでした。

 
> チェックは2段階あります。

> ということでどうでしょうか。

 充分です。マクロは自分で組めないので、実装して頂くと大変助かります。ありが
とうございます。

[ ]
RE:45344 質問)添付ファイルの状態チェッNo.45362
秀まるお2 さん 13/11/26 14:04
 
 先ほどアップロードしたVersion 6.19β10にてオプション追加しました。

 ただし、このオプションが効くためには、アプリケーションソフトがファイル
を「書き換え禁止」の排他制御をかけて開いている必要がありまして、アプリ
ケーションソフトの種類によってはオプションONでもうまく判定しないことがあ
りえます。

 WordやExcelならうまく効きます。

 Windowsに付属のペイントだと全然効かないです。

 ファイルを編集中に、そのファイルを削除出来てしまうソフトだと効かないで
す。

 秀丸エディタの場合だと、「動作環境・ファイル・排他制御」の所の「ファイ
ルの排他制御」を「上書きだけ禁止」または「読み書き禁止」にしてると効きま
す。

 そういうオプションとご理解の上で使って欲しいです。

[ ]
RE:45362 質問)添付ファイルの状態チェッNo.45365
tera_km さん 13/11/26 17:10
 
こんにちは、お世話になります。

仕様の条件は了解いたしました。excelとwordでチェックできれば充分です。

早速テストしましたが、当該オプションoff(チェックはずれた状態)でも編集中の
メッセージが出ます。ご確認お願いします。

windowsXPsp3

[ ]
RE:45365 質問)添付ファイルの状態チェッNo.45385
秀まるお2 さん 13/11/28 10:14
 
 動作確認&バグ情報ありがとうございます。

 今回追加した機能ですが、間違って「添付ファイルが書き換わった時」のオプ
ションON時に効くようになってしまってました。また修正させていただきます。


[ ]