C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 指定フォルダがアクセス中か


(過去ログ 46 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■25082 / inTopicNo.1)  指定フォルダがアクセス中か
  
□投稿者/ asuka (54回)-(2008/09/15(Mon) 13:02:24)

分類:[C#] 

フォルダAの内容フォルダBにコピーするプログラムを作成しております。

フォルダAは日に何度か更新され、更新される度にフォルダBへコピーし、

コピーが完了したらフォルダAの内容を[After]フォルダへ移動して完了通知メールを投げるようにしております。



そこで問題なのですが、フォルダAの更新が外部からの外付けUSBメモリであったり、CD(DVD)-ROMであったりします。

外部からフォルダAへコピー中は、フォルダBへはコピーしたくない状態です。

プログラムはタイマーを設定してフォルダAが更新中でなく、データがあればフォルダBへコピーする仕様にしたいのですが、

外付けUSBやCD(DVD)-ROMでフォルダAへコピー中かどうか判断する術はありますでしょうか?

引用返信 編集キー/
■25098 / inTopicNo.2)  Re[1]: 指定フォルダがアクセス中か
□投稿者/ れい (787回)-(2008/09/15(Mon) 16:19:43)
No25082 (asuka さん) に返信
全般に日本語がよくわかりません。

特に
> そこで問題なのですが、フォルダAの更新が外部からの外付けUSBメモリであったり、CD(DVD)-ROMであったりします。
この辺。

「フォルダAの更新」が「外部からの外付けUSBメモリ」であることはありません。

「外部からの外付けUSBメモリ」から「フォルダA」へ「ファイルを転送する」ということですか?

ならばとりあえず「FileSystemWatcher」を調べるとよいかもしれませんが、
実際にコピーをする主体(「プログラム」なり「人間」なり)がうまく動いてくれるようにしないとうまくいかないはずです。

例えば、コピーをする際には必ず「読み込み共有不可」となるようにコピーするだとか、
コピー中はファイル名を「xxx」ではじめるようにして、コピー後に名前を変えるとか、
コピー中は特定のファイルやフォルダをロックするとか。


引用返信 編集キー/
■25167 / inTopicNo.3)  Re[2]: 指定フォルダがアクセス中か
□投稿者/ asuka (55回)-(2008/09/16(Tue) 14:51:57)
> 全般に日本語がよくわかりません。

全般に日本語がよくわかりずらくてすいません。



> 「フォルダAの更新」が「外部からの外付けUSBメモリ」であることはありません。
>
> 「外部からの外付けUSBメモリ」から「フォルダA」へ「ファイルを転送する」ということですか?

はい、そういう意図です。



> ならばとりあえず「FileSystemWatcher」を調べるとよいかもしれませんが、
> 実際にコピーをする主体(「プログラム」なり「人間」なり)がうまく動いてくれるようにしないとうまくいかないはずです。

なるほど、どこから調べていいのやら見当もつかなかったので助かりました。

ありがとうございます。



> 例えば、コピーをする際には必ず「読み込み共有不可」となるようにコピーするだとか、
> コピー中はファイル名を「xxx」ではじめるようにして、コピー後に名前を変えるとか、
> コピー中は特定のファイルやフォルダをロックするとか。

「外部からの外付けUSBメモリ」から「フォルダA」へ「ファイルを転送する」際は、

手動で行いますのでこの段階では「読み込み共有不可」やリネームは出来ない仕様になっております。



例えば、「外部からの外付けUSBメモリ」から「フォルダA」へ「ファイルを転送する」際、

OSはコピーダイアログを表示しますので、OSは「外部からの外付けUSBメモリ」から「フォルダA」へ「ファイルを転送する」かが分かっているのかな?

と考えておりまして、

ならば自作のプログラムからでも「外部からの外付けUSBメモリ」から「フォルダA」へ「ファイルを転送する」中かどうか分かることは出来ないかな?

というのは伝えたかった趣旨です。



もしもこれが分かるようでしたら、「外部からの外付けUSBメモリ」から「フォルダA」へ「ファイルを転送する」中はフォルダAからフォルダBへのコピーを処理をせず、

「外部からの外付けUSBメモリ」から「フォルダA」へ「ファイルを転送する」中でなければ、

この段階でリネームしてコピーしたいな、と思っております。



まずは教えて頂いたFileSystemWatcherを調査したいと思います。

ありがとうございます。

引用返信 編集キー/
■25169 / inTopicNo.4)  Re[3]: 指定フォルダがアクセス中か
□投稿者/ れい (793回)-(2008/09/16(Tue) 15:11:22)
No25167 (asuka さん) に返信
> 例えば、「外部からの外付けUSBメモリ」から「フォルダA」へ「ファイルを転送する」際、
>
> OSはコピーダイアログを表示しますので、OSは「外部からの外付けUSBメモリ」から「フォルダA」へ「ファイルを転送する」かが分かっているのかな?
>
> と考えておりまして、
>
> ならば自作のプログラムからでも「外部からの外付けUSBメモリ」から「フォルダA」へ「ファイルを転送する」中かどうか分かることは出来ないかな?
>
> というのは伝えたかった趣旨です。

OSにもいろいろな層があります。
ダイアログを出しているのはシェルですので、
MSDNの「Windows Shell」を見れば何か情報があるかもしれません。
私は全然しりませんが、コピー状態を取得できるのかもしれません。

ダイアログが表示されているかはEnumWindowsなどで調べることが可能です。

シェル監視やダイアログ監視ができるのだとしても、私はあまりオススメしません。

コピーの操作も人によっていろいろ違います。
ドラッグドロップ、コピー&ペースト、コマンドプロンプトから。

シェルを介さないコピーはシェルにはわかりませんし、
シェルは巨大で且つ変更されることが比較的多いので、
条件を網羅するのが大変です。

> まずは教えて頂いたFileSystemWatcherを調査したいと思います。

FileSystemWatcherはOSのFileSystem層での監視になります。

より低レベルですので確実性は高いですが、
変更されたことがわかるのであって変更されていることがわかるわけではありません。

話を聞く限りでは、無理のある仕様に思えます。
仕様を検討しなおすのがよいと思います。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -