Vous pouvez utiliser Environment.CurrentDirectory
pour obtenir le répertoire courant, et FileSystemInfo.FullPath
pour obtenir le chemin d'accès complet à n'importe quel endroit. Aussi, tout en se qualifier à la fois le répertoire courant et le fichier en question, et ensuite, vérifiez si le nom complet du fichier commence par le nom du répertoire - si il ne, juste de prendre les mesures appropriées de sous-chaîne basé sur le nom du répertoire de la longueur.
Voici un exemple de code:
using System;
using System.IO;
class Program
{
public static void Main(string[] args)
{
string currentDir = Environment.CurrentDirectory;
DirectoryInfo directory = new DirectoryInfo(currentDir);
FileInfo file = new FileInfo(args[0]);
string fullDirectory = directory.FullName;
string fullFile = file.FullName;
if (!fullFile.StartsWith(fullDirectory))
{
Console.WriteLine("Unable to make relative path");
}
else
{
// The +1 is to avoid the directory separator
Console.WriteLine("Relative path: {0}",
fullFile.Substring(fullDirectory.Length+1));
}
}
}
Je ne dis pas que c'est le plus robuste chose dans le monde (les liens symboliques pourrait probablement confondre), mais c'est probablement acceptable si c'est juste un outil que vous allez utiliser de temps en temps.