Команда удаления информации о файле - PullRequest
2 голосов
/ 22 февраля 2010

Мое приложение делает это, воспроизводит выбранный звук с помощью wmplib, и после statechangeevent = 1 (медиапроигрыватель остановлен) я закрою проигрыватель с помощью команды close () и установив URL-адрес на "";

Теперь каждый раз, когда я пытался удалить звук, который воспроизводится в данный момент, на самом деле он будет удален, потому что, когда я посмотрел каталог, файл был удален. Каждый раз, когда я удаляю файл, я перезагружаю элементы управления, в которых будет указан файл мультимедиа в каталоге. Однако он все равно найдет звук, который уже был удален в каталоге.

Я пробовал этот способ, медленно отлаживая, и я обнаружил, что удаление команды File info delete() занимает больше времени, так как закрытие медиапроигрывателя занимает больше времени, поэтому всякий раз, когда я пытаюсь перезагрузить коллекции после удаления текущей воспроизводимой песни, удаленная песня остается там. Когда я попытался удалить, когда медиапроигрыватель не воспроизводит песню, он быстро удаляется, и при перезагрузке коллекций результат песни исчез.

Вопрос в том, как я могу удалить файл, который воспроизводится в данный момент, и убедиться, что при перезагрузке коллекций будет показано правильное количество песен в каталоге?

Любая помощь будет принята с благодарностью.

Мой код, как показано ниже.

 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;
        }

1 Ответ

1 голос
/ 22 февраля 2010

Похоже, что простым решением этой проблемы было бы не допустить удаления чего-то, что воспроизводится в данный момент ... либо этого, либо гарантировать, что процесс удаления завершен перед перезагрузкой коллекции.

РЕДАКТИРОВАТЬ Исходя из приведенного выше кода, когда вы создаете экземпляр fileinfo, который нужно удалить, вы добавляете Convert.ToString(filepath[i]) к пути к файлу нового объекта fileinfo. Вместо этого я бы избавился от всего до этого и просто использовал filepath[i].FullName.

Так что я бы просто создал экземпляр удаляемого объекта как new FileInfo(filepath[i].FullName);.

...