DOBON.NET DOBON.NETプログラミング掲示板過去ログ

【Windows 7】動画ファイルが保存されたフォルダを削除できません。

環境/言語:[環境/Windows 7 Enterprise 言語/C#、.NET Framework 2.0]
分類:[.NET]

2010/05/25(Tue) 16:41:21 編集(投稿者)

初めて投稿致します。宜しくお願いします。
今までOS:Windows XPで問題なく動作していた機能(動画保存用一時フォルダの
削除)がWindows 7に移行した途端に動作しなくなりました。
いろいろと試してみたのですが、まったく解決の糸口が見つからないため投稿させて頂きました。

【問題箇所について】
C#で開発している画像・動画保存・再生のアプリです。
動画を登録する際にユーザーが登録画面で指定したパスの動画ファイルをまず、
ユーザーの端末名で作成した一時保存フォルダに命名規則にしたがった名前で
保存してから再生するようになっています。それから、@ユーザーが登録を確定
すれば、一時保存フォルダにある動画ファイルを実フォルダにコピーして一時保存
フォルダを削除、Aキャンセルすれば、ただ一時保存フォルダを削除するように
なっています。
しかし、Windows XPで問題なく動作していた一時保存フォルダ削除がWindows 7
では「ディレクトリが空ではありません。」というエラーでフォルダが削除できなくなってしまいました。

【検証内容】
 (1)画像ファイルのほぼ同じコーディング箇所では全く問題なく一時保存
    フォルダが削除される。

 (2)フォルダ削除前に中のファイルを削除するPGを追加。
    ⇒ファイル削除は通るがやはりフォルダ削除でエラーが発生。
    エラー:「パス '○○○○.wmv' へのアクセスが拒否されました。」
    ⇒しかし、確認するとこの動画ファイルはフォルダから削除されている。

 (3)エラーが出ないでうまくいくことがたまにある。
    ※同様の動画ファイルで実験し、3〜5回に1度くらい正常に削除される
    ※容量が大きい動画ファイルほどエラーが出る?

 (4)Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectoryを利用すると
    エラーはスローされないが、フォルダは削除されない。

 (5)System.Threading.Thread.Sleepで適当な時間待たせるとフォルダが正常に
    削除された。

【プログラム】

string TempGazoPath =
"C:\\Test\\Temp\\Gazo\\" + System.Environment.MachineName
string TempDogaPath =
"C:\\Test\\Temp\\Doga\\" + System.Environment.MachineName

■一時保存フォルダ作成箇所

if (false == System.IO.Directory.Exists(TempGazoPath))
{
//画像一時保存フォルダ作成
System.IO.Directory.CreateDirectory(TempGazoPath);
}

if (false == System.IO.Directory.Exists(TempDogaPath))
{
//動画一時保存フォルダ作成
System.IO.Directory.CreateDirectory(TempDogaPath);
}

■一時保存フォルダ削除箇所
try
{
//画像ファイル削除
if (System.IO.Directory.Exists(TempGazoPath))
{
Global.Util.DeleteDirectory(TempGazoPath);
}

//↓検証のため追加したPG(フォルダ内の動画削除)
//System.IO.File.Delete(TempDogaPath + "\\○○○.wmv");

//動画ファイル削除
if (System.IO.Directory.Exists(TempDogaPath))
{
//メディア・プレイヤーを停止
axWindowsMediaPlayer1.Ctlcontrols.stop();
axWindowsMediaPlayer1.close();

//System.Threading.Thread.Sleep(10000);←★一定時間待機すると正常に削除

System.IO.Directory.Delete(TempDogaPath, true);←★エラー発生

/* こっちでもフォルダは削除されない。
    Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory(
     TempDogaPath,
     Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs,
    Microsoft.VisualBasic.FileIO.RecycleOption.DeletePermanently,
    Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing);
*/
}
}
catch (Exception ex)
{
MessageBox.Show(
ex.Message,
"エラー",
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Error
);
}

以上です。
動画ファイルが何かに掴まれてしまっているのでしょうか?
しかし、それだとうまく行く場合もあるし、ファイルを先に消すプログラムが
正常に動作している理由がわかりません。そもそもXPでは動作していたのです。

ご教授ください。
宜しくお願い致します。
単にメディアプレイヤーが完全に終了するのに時間がかかるようになってるだけってことはないですかね?
ちなみにどの程度待てば削除出来るようになる感じですか?

あと、ファイルは削除出来てるのにどうなってるのか、というのは、
多分後からの削除を許可した状態でファイルが開かれてるのではと思います。
そうすると削除は成功しますが、先に開いた側が閉じるまで削除は完了してない状態になったと思います。
この状態の時は、見た目には結構妙な状態になったような記憶があります。
■No26879に返信(なちゃさんの記事)
> 単にメディアプレイヤーが完全に終了するのに時間がかかるようになってるだけってことはないですかね?
> ちなみにどの程度待てば削除出来るようになる感じですか?

ありがとうございます。
なるほど、それが原因なのでしょうか。
ちなみに待機時間は
System.Threading.Thread.Sleep(10000);
のとおりです。
動画の容量によって待機しなければならない時間も多くなるのでしょうか?

また、WindowsMediaPlayerで再生していた動画を停止してすぐさま削除する方法は
あるのでしょうか?
もしあれば、ご教授ください。

お願い致します。
> なるほど、それが原因なのでしょうか。
> ちなみに待機時間は
> System.Threading.Thread.Sleep(10000);
> のとおりです。
> 動画の容量によって待機しなければならない時間も多くなるのでしょうか?

コレくらいのことなら自分で検証して報告する気になりませんかね?
No26887のご投稿は、匿名や言葉づかいなどの点で「書き込みのルールについて」に反しています。お気持ちは分かりますが、このような言い方では反発を招くだけで、解決にはならないと私は考えます。

面倒だとは思いますが、今後は「書き込みのルールについて」をご一読いただき、ご理解のうえ、ご投稿ください。ご協力をお願いいたします。

書き込みのルールについて
http://dobon.net/vb/bbs/index.html
>その他さん
検証しました。
容量によって待機する時間はありまり変わらないようです。

>コレくらいのことなら自分で検証して報告する気になりませんかね?
確かに一理ありますが、匿名の掲示板というものはやはり、あなたの
ような方がいる限り、質の向上は望めないように思えます。

>管理人さん
せっかくの御忠告を私まで台無しにしてしまっていたらごめんなさい。
  • 題名: 【注意】「書き込みのルールについて」をお読みください
  • 著者: 管理人
  • URL: http://dobon.net/
  • 日時: 2010/06/03 3:37:22
  • ID: 26905
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No26903に返信(@USKさんの記事)

「書き込みのルールについて」では、ルール違反の投稿への返信をご遠慮いただいています。@USKさんのご投稿のようにルール違反の投稿に反論されますと、反論された方も当然反論したくなります。それどころ、@USKさんの反論が許されるのであれば、その反論として「その他」さんの反論も許されなければ不公平です。しかしこれではきりがありませんので、どちらも禁止とさせていただきます。

ただし、このようなルールについてのご意見は、「お気楽掲示板」で受け付けます。

ご理解とご協力をお願いいたします。

DOBON.NET | プログラミング道 | プログラミング掲示板