2012-04-10 1 views
6
vorbereiten

Ich schreibe ein C# -Programm, das bestimmte Tags aus Dateien liest und basierend auf Tag-Werte eine Verzeichnisstruktur erstellt.In C# wie kann ich eine Zeichenfolge für den Windows-Verzeichnisnamen

Nun könnte es irgendetwas in diesen Tags sein,

Wenn der Tag-Namen es geeignet zu machen, indem diese Zeichen mit etwas ersetzen geeignet nicht geeignet ist es ich für einen Verzeichnisnamen haben vorzubereiten. Daher schlägt die Verzeichniserstellung nicht fehl. ich folgenden Code wurde mit aber ich erkannte dies nicht genug ist ..

path = path.replace("/","-"); 
path = path.replace("\\","-"); 

raten Sie bitte, was ist der beste Weg, es zu tun ..

Dank,

+1

Es kann ein direktere/effizient sein, da die vier Jahre her, seit dieser veröffentlicht wurden, aber hier ist ein alter SO Link: http: // stackoverflow.com/questions/333175/is-there-a-way-of-making-strings-file-path-safe-in-c –

+1

Werfen Sie einen Blick auf [Path.GetInvalidFileNameChars] (http://msdn.microsoft.com). com/de-de/library/system.io.path.getinvalidfilenamechars.aspx) und [Path.GetInvalidPathChars] (http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx) – Marlon

+0

Ich habe einen Blog-Beitrag, der beschreibt, wie man eine WPF ValidationRule schreibt, um diese Sache zu validieren, sie hat einen Haufen Code, den man rippen kann daraus: [* Datenbindung, Validierung und MVVM auf die nächste Stufe - Teil 2 *] (http://techfilth.blogspot.co.nz/2011/07/taking-data-binding-validation-and-mvvm. html).Ich erwähne das, weil es eine Reihe von Randfällen gibt, wenn es um Pfad- und Dateinamen geht. – slugster

Antwort

2

Die Zeichen, die Sie jetzt verwenden müssen, sind: ? < > | : \/* "

string PathFix(string path) 
    { 
     List<string> _forbiddenChars = new List<string>(); 
     _forbiddenChars.Add("?"); 
     _forbiddenChars.Add("<"); 
     _forbiddenChars.Add(">"); 
     _forbiddenChars.Add(":"); 
     _forbiddenChars.Add("|"); 
     _forbiddenChars.Add("\\"); 
     _forbiddenChars.Add("/"); 
     _forbiddenChars.Add("*"); 
     _forbiddenChars.Add("\""); 

     for (int i = 0; i < _forbiddenChars.Count; i++) 
     { 
      path = path.Replace(_forbiddenChars[i], ""); 
     } 

     return path; 
    } 

Tipp: Sie können nicht doppelte Anführungszeichen (") umfassen, aber Sie können zwei Anführungszeichen ('') umfassen. In diesem Fall:

string PathFix(string path) 
    { 
     List<string> _forbiddenChars = new List<string>(); 
     _forbiddenChars.Add("?"); 
     _forbiddenChars.Add("<"); 
     _forbiddenChars.Add(">"); 
     _forbiddenChars.Add(":"); 
     _forbiddenChars.Add("|"); 
     _forbiddenChars.Add("\\"); 
     _forbiddenChars.Add("/"); 
     _forbiddenChars.Add("*"); 
     //_forbiddenChars.Add("\""); Do not delete the double-quote character, so we could replace it with 2 quotes (before the return). 

     for (int i = 0; i < _forbiddenChars.Count; i++) 
     { 
      path = path.Replace(_forbiddenChars[i], ""); 
     } 

     path = path.Replace("\"", "''"); //Replacement here 
     return path; 
    } 

Sie natürlich werden nur einer von denen (oder sie mit einem bool Parameter einer Funktion kombinieren, um das Angebot zu ersetzen, falls erforderlich)

5

Import-System. IO-Namespace und für Pfad

Path.GetInvalidPathChars 

und für Dateinamen verwenden verwenden

Path.GetInvalidFileNameChars 

Für Eg

string filename = "salmnas dlajhdla kjha;dmas'lkasn"; 

foreach (char c in Path.GetInvalidFileNameChars()) 
    filename = filename.Replace(System.Char.ToString(c), ""); 

foreach (char c in Path.GetInvalidPathChars()) 
    filename = filename.Replace(System.Char.ToString(c), ""); 

Dann können u Path.Combine verwenden Tags hinzuzufügen einen Pfad

string mypath = Path.Combine(@"C:\", "First_Tag", "Second_Tag"); 

//return C:\First_Tag\Second_Tag 
1

Die richtige answer of Nikhil Agrawal einige Syntaxfehler zu erstellen hat.

Nur für den Hinweis, hier ist eine Kompilierung Version:

public static string MakeValidFolderNameSimple(string folderName) 
{ 
    if (string.IsNullOrEmpty(folderName)) return folderName; 

    foreach (var c in System.IO.Path.GetInvalidFileNameChars()) 
     folderName = folderName.Replace(c.ToString(), string.Empty); 

    foreach (var c in System.IO.Path.GetInvalidPathChars()) 
     folderName = folderName.Replace(c.ToString(), string.Empty); 

    return folderName; 
} 
Verwandte Themen