Есть ли простой способ проверить, что путь к файлу находится в определенной папке (.NET Framework)? - PullRequest
0 голосов
/ 19 февраля 2009

В моей программе мне нужно проверить, что несколько путей к файлам находятся в системной папке временных файлов (например, C: \ Users \ Roman \ AppData \ Local \ Temp ). Я не нашел никакого метода в классах System.IO.File , System.IO.Directory и System.IO.Path . Итак, я создал свой собственный:

public static bool IsSafeToDeleteFileOrDirectory(string path)
{
    try
    {
        string tempPath = Path.GetFullPath(
                    Path.Combine(Path.GetTempPath(), ".\\")
                    );
        string fullPath = Path.GetFullPath(path);
        return fullPath.StartsWith(tempPath) &&
               fullPath.Length > tempPath.Length;
    }
    catch (Exception ex)
    {}

    return false;            
}

Но я не уверен, будет ли это всегда работать. Есть ли другое простое решение помимо обхода дерева папок и проверки того, что каждая дочерняя папка существует и ее родительская папка - TEMP?

Ответы [ 3 ]

1 голос
/ 19 февраля 2009

System.IO.Directory.Exists() также могут принимать относительные пути. Я думаю, что это должно сделать это для вас.

0 голосов
/ 19 февраля 2009

Я полагаю, что ваш код будет работать даже для примера thomasrutter, поскольку пути разрешены Path.GetFullPath.

0 голосов
/ 19 февраля 2009

Подход StartsWith не сможет объяснить такие вещи:

tempPath: / tmp /

fullPath: /tmp/../etc/evil.cnf

Сначала вам нужно будет нормализовать два пути, что разрешит что-то вроде ../

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...