【问题标题】:Fileinfo delete command文件信息删除命令
【发布时间】:2010-02-22 15:25:36
【问题描述】:

我的应用程序执行此操作,使用 wmplib 播放选定的声音,当 statechangeevent = 1(媒体播放器停止)时,我将使用 close() 命令关闭播放器并将 URL 设置为“”;

现在每次我都想删除一个正在播放的声音,其实它会被删除,因为当我查看目录的时候,文件已经被删除了。每次删除文件后,我都会重新加载控件,这些控件将列出目录中的媒体文件。但是,它仍然会在目录中找到已经被删除的声音。

我试过这种方式,调试很慢,发现File infodelete()命令需要较长时间才能删除,因为关闭媒体播放器需要较长时间才能删除,这就是为什么每当我在删除当前播放的歌曲后尝试重新加载收藏时,被删除的歌曲仍然存在。 当我在媒体播放器不播放歌曲时尝试删除时,它会快速删除,并且重新加载收藏确实显示歌曲消失的结果。

问题是,我怎样才能删除当前正在播放的文件,以确保重新加载的收藏将显示目录中正确的歌曲数量?

任何帮助将不胜感激。

我的代码如下。

 DirectoryInfo di = new DirectoryInfo(@"C:/Sounds/Custom Sounds/");
        FileInfo[] filepaths = MultipleFileFilter(di, "*.mp3,*.wma,*.wav");
        for (int i = 0; i < filepaths.Length; i++)
        {
            if (Path.GetFileNameWithoutExtension(Convert.ToString(filepaths[i]))== deleteItem)
            {

                System.IO.FileInfo fi = new System.IO.FileInfo(@"C:/Sounds/Custom Sounds/" + Convert.ToString(filepaths[i]));
                fi.Delete();
            }
        }

// Load the sounds
        DirectoryInfo dii = new DirectoryInfo(@"C:/Sounds/Custom Sounds/");
        FileInfo[] filess = MultipleFileFilter(dii, "*.mp3,*.wma,*.wav");
        for (int i = 0; i < filess.Length; i++)
        {
            RadioButton rb = new RadioButton();
            rb.Text = Path.GetFileNameWithoutExtension(filess[i].ToString());
            rb.Name = Path.GetFileName(filess[i].ToString());
            rb.CheckedChanged += new EventHandler(radioButton_Update);
            Point lc = new Point(15, yPos);
            rb.Location = lc;
            panelSound.Controls.Add(rb);
            lstbxCustomSounds.Items.Add(Path.GetFileNameWithoutExtension(rb.Text));

            yPos += 20;
            //add into the arraylist
            controlsCollections.Add(rb);
        }

也许这就是问题所在?因为只有当前正在播放的正在被删除的声音才会导致这个问题?

private void wPlayer_PlayStateChange(int newstate)
    {

        if (newstate == 1 )//Media finished
        {
            btnPlay.Text = "Play";
            wplayer.close();
            btnDelete.Enabled = true;
            wplayer.URL = "";
        }
        else if (newstate == 3)
        {
            btnDelete.Enabled = false;
        }

【问题讨论】:

  • 还有人有什么建议吗?

标签: c# command media-player fileinfo


【解决方案1】:

对于这个问题,一个简单的答案似乎是不允许删除当前正在播放的内容……或者确保删除过程在重新加载集合之前完成。

编辑根据上面的代码,当您实例化要删除的文件信息时,您会将Convert.ToString(filepath[i]) 附加到新文件信息对象的文件路径中。相反,我会在此之前摆脱一切,只使用filepath[i].FullName

所以我只是将要删除的对象实例化为new FileInfo(filepath[i].FullName);

【讨论】:

  • 那么我怎样才能确保在重新加载集合之前完成删除过程?我尝试了一个while循环(检查目录中的文件名),它在重新加载集合之前将程序挂起5秒。
  • 什么时候执行删除?它在另一个线程上吗?我说在删除语句之后立即更新集合。无论删除语句需要多长时间,删除完成后它仍然会更新。
  • 删除不在另一个线程中。我的重载集合就是这样工作的,遍历目录并找到目录中的文件。删除文件后,我将调用我的重新加载收集方法,可悲的是,他们仍然可以在那里找到文件。我在想这个文件还没有被完全删除,所以它仍然能够感知到那个文件。
  • 你能发布一些代码吗?如果在 delete 语句完成后调用 reload 函数,则目录不应包含已删除的项目。
  • 即使使用我编辑的语句,问题仍然在于您刷新文件列表的方式和时间......如果发生删除,那么它肯定会反映出来,如果你是删除后刷新您的列表。也就是说,除非它们发生在不同的线程上。
猜你喜欢
  • 2019-08-19
  • 2018-08-27
  • 2019-09-21
  • 2018-08-26
  • 2012-07-08
  • 2012-06-27
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
相关资源
最近更新 更多