2009-02-19 2 views
0

Dans mon programme, j'ai besoin de vérifier que plusieurs chemins d'accès aux fichiers se trouvent dans le dossier des fichiers temporaires du système (par exemple C: \ Users \ Roman \ AppData \ Local \ Temp). Je n'ai trouvé aucune méthode dans System.IO.File, System.IO.Directory et System.IO.Path cours de le faire. J'ai donc créé le mien:Existe-t-il un moyen simple de vérifier qu'un chemin d'accès à un fichier se trouve dans un dossier donné (framework .NET)?

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

Mais je ne suis pas sûr que cela fonctionnera toujours. Existe-t-il une autre solution simple en plus de parcourir l'arborescence des dossiers et de vérifier que chaque dossier enfant existe et que son dossier parent est TEMP?

Répondre

0

L'approche StartsWith ne parviendra pas à expliquer ce genre de chose:

tempPath est:/tmp/

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

Vous

devra normaliser les deux chemins d'abord, ce qui résoudra quelque chose comme ../

+0

Il le fait déjà. GetFullPath() –

0

Je crois que votre code fonctionnera même pour l'exemple de thomasrutter puisque les chemins sont résolus par Path.GetFullPath.

Questions connexes