예제 #1
0
        /// <summary>
        /// あるディレクトリの中の特定のアイテム(ファイルまたはサブディレクトリ)が消えたらイベントを送出する。
        /// </summary>
        /// <param name="dirPath">アイテムがあるディレクトリ</param>
        /// <param name="itemName">アイテム(サブディレクトリまたはファイル)</param>
        public FileDisappearCheck(string dirPath, string itemName, FileDisappearedEventHandler ev)
        {
            // Path.GetDirectoryName(path), Path.GetFileName(path));

            if (dirPath == null)
            {
                return;
            }

            string path = dirPath + "\\" + itemName;

            lock (mInstances) {
                if (mInstances.ContainsKey(path))
                {
                    return;
                }


                mPath            = path;
                mFileDisappeared = ev;

                mFsw = new FileSystemWatcher(dirPath, itemName);
                mFsw.NotifyFilter = NotifyFilters.DirectoryName
                                    | NotifyFilters.FileName;
                mFsw.Deleted            += new FileSystemEventHandler(OnDeleted);
                mFsw.Renamed            += new RenamedEventHandler(OnRenamed);
                mFsw.Error              += new ErrorEventHandler(OnError);
                mFsw.EnableRaisingEvents = true;
                mInstances.Add(path, this);

                // DumpKeyList();

                // 親ディレクトリも調べる。
                if (mInstances.ContainsKey(dirPath))
                {
                    return;
                }
            }

            // 親ディレクトリが削除されたときもイベントを送出する。
            var di = Directory.GetParent(dirPath);

            if (di != null && di.FullName != null && 0 < di.FullName.Length)
            {
                string ppDir = di.FullName;

                StringBuilder sb = new StringBuilder();
                for (int i = ppDir.Length; i < dirPath.Length; ++i)
                {
                    sb.Append(dirPath[i]);
                }

                string subDir = sb.ToString();
                subDir = subDir.TrimStart('\\', '/');

                var p = new FileDisappearCheck(ppDir, subDir, ev);
            }
        }
 public PlayListItemInfo(PcmDataLib.PcmData pcmData, FileDisappearCheck.FileDisappearedEventHandler cb)
 {
     mPcmData            = pcmData;
     mRowId              = mNextRowId++;
     mFileDisappearCheck = new FileDisappearCheck(System.IO.Path.GetDirectoryName(pcmData.FullPath), System.IO.Path.GetFileName(pcmData.FullPath), cb);
 }