2017-03-15 3 views
0

Zum Beispiel zu bekommen,Wie einige Teile des Verzeichnis C#

foreach (var imageFile in Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)) 
{ 
    //add to list 
} 

Ausgabe von imagefile = C:\Users\Documents\MyWeb\Slide\Main\slider2.png

ich nur \Slide\Main\slider2.png

Gibt es eine einfache Möglichkeit, dies zu tun bekommen müssen?

+0

Wie entscheiden Sie, welcher Teil zu verwerfen? Warum nicht einfach den Verzeichnispfad aus dem Image-Pfad entfernen? zB 'imageFile.Remove (dir);' –

+1

Nun, was ist die Regel, die verwendet werden sollte? Für diesen einen Fall können Sie den Pfad basierend auf 'MyWeb' vielleicht teilen, aber was ist mit anderen Verzeichnissen? Gibt es einen gemeinsamen Ort, wo es aufgeteilt ist? –

+0

Es hängt davon ab, wie genau dieser Teil bestimmt werden soll. Ist es immer vier Ordner im Pfad oder etwas anderes? –

Antwort

1

Da Sie für einen bestimmten Ordner suchen, können Sie dies tun:

var imageFile = @"C:\Users\Documents\MyWeb\Slide\Main\slider2.png"; 
var subFolder = @"\Slide\Main"; 

var relativePath = imageFile.Substring(
    imageFile.IndexOf(subFolder, StringComparison.OrdinalIgnoreCase)); 
0

Sie so etwas wie dieses verwenden:

string imageFile = @"C:\Users\Documents\MyWeb\Slide\Main\slider2.png"; 
string match = System.Text.RegularExpressions.Regex.Match(imageFile,@"\\Slide\\Main\\.*").Value; 
0

Warum nicht String.split mit ("\") und das wird Ihnen alle Teile dieses Pfades und dann können Sie den Rest von der gewünschten Position verketten, oder verwenden Sie ein Regular Expressionn als @Zalomon sagte

0

Sie können es mit Uri leicht tun, habe ich getestet es, so ist es in Ordnung

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public static void Main() 
     { 
      Uri uriAddress1 = new Uri("C:\\Users\\Documents\\MyWeb\\Slide\\Main\\slider2.png"); 
      Console.WriteLine("The parts are {0}{1}{2}", uriAddress1.Segments[5], uriAddress1.Segments[6], uriAddress1.Segments[7]); 
      Console.ReadKey(); 
     } 
    } 
} 
0

arbeitet wünschte ich, ich könnte die Person zu, die diese ersten schrieben, aber ich habe da die Verbindung verloren.

Aus meiner Dienstprogramme Sammlung:

/// <summary> 
    /// Generates a Relative Path for targetPath, from basePath 
    /// </summary> 
    /// <param name="basePath">The Directory to start from.</param> 
    /// <param name="targetPath">Full Path to file or folder that is to be made relative</param> 
    /// <returns>The relative location of targetPath, from basePath</returns> 
    /// <remarks>Tested in Util.Tests.IO.PathUtilsTests</remarks> 
    public static string MakeRelativePath(string basePath, string targetPath) 
    { 
     if (basePath == targetPath) 
      return ""; 

     if (!basePath.EndsWith(Path.DirectorySeparatorChar.ToString())) 
      basePath += Path.DirectorySeparatorChar; 

     if (String.IsNullOrEmpty(basePath)) throw new ArgumentNullException("basePath"); 
     if (String.IsNullOrEmpty(targetPath)) throw new ArgumentNullException("targetPath"); 

     var fromUri = new Uri(basePath); 
     var toUri = new Uri(targetPath); 

     if (fromUri.Scheme != toUri.Scheme) { return targetPath; } // path can't be made relative. 

     var relativeUri = fromUri.MakeRelativeUri(toUri); 
     var relativePath = Uri.UnescapeDataString(relativeUri.ToString()); 

     if (toUri.Scheme.Equals("file", StringComparison.InvariantCultureIgnoreCase)) 
     { 
      relativePath = relativePath.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); 
     } 

     return relativePath; 
    } 

Verbrauch:

var output = @"C:\Users\Documents\MyWeb\Slide\Main\slider2.png"; 
var basePath = @"C:\Users\Documents\MyWeb\"; 

var rel = MakeRelativePath(basePath, output); 
+0

[Diese] (http://stackoverflow.com/a/340454/1997232) Person? – Sinatr

+0

Ja! Das sieht aus, wo ich das zuerst herbekommen habe. –

Verwandte Themen