Эквивалентность Microsoft.VisualBasic.FileIO.FileSystem в C # - PullRequest
5 голосов
/ 06 апреля 2011

Я использую VS 2008, .net 3.5, C # проекты.Мне нужно сделать то же функционально, что и Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory.

Кто-нибудь говорит, что ссылка на Microsoft.VisualBasic часто нежелательна из C #.Любая ассоциация с VB из кода C # кажется мне нежелательной.

Используя класс FileSystem, это идеальное решение, но я предпочитаю не ссылаться на библиотеку Microsoft.VisualBasic.Этого я бы избежал.

     private static void DeleteDirectory(string destino)
            {
    //UIOption Enumeration. Specifies whether to visually track the operation's progress. Default is UIOption.OnlyErrorDialogs. Required.

    //RecycleOption Enumeration. Specifies whether or not the deleted file should be sent to the Recycle Bin. Default is RecycleOption.DeletePermanently.

    //UICancelOption Enumeration. Specifies whether to throw an exception if the user clicks Cancel. Required.
                Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory(destino, 
Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, 
Microsoft.VisualBasic.FileIO.RecycleOption.DeletePermanently, 
Microsoft.VisualBasic.FileIO.UICancelOption.ThrowException);
                //Directory.Delete(destino, true);
            }

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

Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile(file.FullName,
    Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs,
    Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin);

Ответы [ 4 ]

1 голос
/ 06 апреля 2011

Аналогичные / похожие функции доступны в пространстве имен System.IO:

System.IO.FileInfo fi = new System.IO.FileInfo("C:\\Test.txt");
fi.Delete();

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("C:\\Test");
di.Delete(true); //Recursive, pass false for no recursion.

Я не знаю о существовании SendToRecycleBin эквивалента, но вы можете попробовать:

di.MoveTo("C:\\$Recycle.Bin\\S-..."); //You'd need to know the SID of the user logged in

Чтобы повторить пример
Следующий код даст вам нечто похожее на то, что вы предоставили в качестве примера:

try
{
    bool deletePermanently = true; //Set to false to move

    System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("C:\\Test");
    if (deletePermanently)
    {
        if (di.Exists)
            di.Delete(true);
    }
    else
    {
        if (di.Exists)
            di.MoveTo("C:\\$Recycle.Bin\\S-0-0-00-00000000-000000000-0000000000-000"); //Replace with your SID
    }
}
catch
{
    Console.WriteLine("Error deleting directory"); //Add exception detail messages...
}

Опять же, в приведенном выше примере вам потребуется идентифицировать SID пользователя, прежде чем он сможет отправить в корзину.

0 голосов
/ 06 апреля 2011

Возможный дубликат

System.IO и VisualBasic.FileIO

Вы можете использовать FileIO от Microsoft.VisualBasic и AFAIK, он не будет вести себя необоснованно ..

0 голосов
/ 06 апреля 2011

Вы можете попробовать следующее.

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("C:\\MyDirectoryToDelete");
di.Delete(true);

Или даже

System.IO.Directory.Delete("Path goes here");

Надеюсь, это поможет.

0 голосов
/ 06 апреля 2011

Используйте Directory.Delete, если вы хотите удалить каталог напрямую, без использования корзины, как это делает ваш метод DeleteDirectory.Чтобы использовать корзину, придерживайтесь решения, указанного в связанном вопросе.

...