2015-07-21 3 views
-2

Я попытался проверить, является ли путь к удаленной директории или файлу путь к каталогу или файлу. Я нашел этот код:Проверьте, является ли путь каталогом или файлом C#

FileAttributes attr = File.GetAttributes(@"C:\Example"); 
if (attr.HasFlag(FileAttributes.Directory)) 
    MessageBox.Show("It's a directory"); 
else 
    MessageBox.Show("It's a file"); 

Однако этот код не работает с удаленным каталогом или файлом.

У меня есть две папки

C:\Dir1 
C:\Dir2 

В Dir1 есть нормальные файлы, такие как «test.txt», в Dir2 есть сжатые файлы, такие как «test.rar» или «test.zip» и мне нужно удалите файл в Dir2, когда файл в Dir1 удален.

Что-то я пробовал, но ничего не работает.

Можно ли достичь этого?

Спасибо!

+7

Если оно было удалено, оно больше не существует, имеет ли значение то, что было, когда оно существовало? –

+0

Однако мне нужно удалить это из другой папки, поэтому мне нужно знать, если его файл или каталог (из-за расширения) –

+0

Вам нужно его удалить (что произойдет в будущем) или вы хотите проверить, что удалено файл или каталог, когда он существовал (что происходило в прошлом)? –

ответ

1

Если объект, представленный путем, не существует или был удален из файловой системы, все, что у вас есть, представляет собой строку, представляющую путь к файловой системе: это не что-то.

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

c:\foo\bar\baz\bat 

берется указать файл, в то время как

c:\foo\bar\baz\bat\ 

сделан для указания каталога.

Если то, что вы хотите, чтобы удалить запись файловой системы (либо файл или каталог, рекурсивно удаляемый его содержимое и подкаталоги), что-то вроде должно хватить:

public void DeleteFileOrDirectory(string path) 
{ 

    try 
    { 
    File.Delete(path) ; 
    } 
    catch (UnauthorizedAccessException) 
    { 
    // If we get here, 
    // - the caller lacks the required permissions, or 
    // - the file has its read-only attribute set, or 
    // - the file is a directory. 
    // 
    // Either way: intentionally swallow the exception and continue. 
    } 

    try 
    { 
    Directory.Delete(path , true) ; 
    } 
    catch (DirectoryNotFoundException) 
    { 
    // If we get here, 
    // - path does not exist or could not be found 
    // - path refers to a file instead of a directory 
    // - the path is invalid (e.g., on an unmapped drive or the like) 
    // 
    // Either way: intentationally swallow the exception and continue 
    } 

    return ; 
} 

Следует отметить, что существует любое количество исключений, которые могут быть выброшены во время этого процесса.

Смежные вопросы