ben size ayırıcılar kapalı dayalı kullanarak ne olabileceğini çevre söyleyemem, ama böyle bir kütüphane görmedim önce.
Bu nedenle reflektörü ve System.IO.Path
'u temel alarak tekerleği yeniden icat etmek zor değildir.
- gerekirse İsteğe
InvalidPathChars
değiştirmek CTOR
- bu sınıfın
- Tedarik sizin ayırıcı karakterleri bir örneğini oluşturun.
Bu, çerçeve tarafından kullanılan kodun oldukça hızlı olması veya yalnızca önemsiz bir fark olması gerektiği anlamına gelir. RegEx'den daha hızlı olabilir ya da olmayabilir, muhtemelen bir teste değer.
class ArbitraryPath
{
private readonly char _directorySeparatorChar;
private readonly char _altDirectorySeparatorChar;
private readonly char _volumeSeparatorChar;
public ArbitraryPath(char directorySeparatorChar, char altDirectorySeparatorChar, char volumeSeparatorChar)
{
_directorySeparatorChar = directorySeparatorChar;
_altDirectorySeparatorChar = altDirectorySeparatorChar;
_volumeSeparatorChar = volumeSeparatorChar;
}
public string Combine(string path1, string path2)
{
if ((path1 == null) || (path2 == null))
{
throw new ArgumentNullException((path1 == null) ? "path1" : "path2");
}
CheckInvalidPathChars(path1);
CheckInvalidPathChars(path2);
if (path2.Length == 0)
{
return path1;
}
if (path1.Length == 0)
{
return path2;
}
if (IsPathRooted(path2))
{
return path2;
}
char ch = path1[path1.Length - 1];
if (ch != _directorySeparatorChar && ch != _altDirectorySeparatorChar && ch != _volumeSeparatorChar)
{
return (path1 + _directorySeparatorChar + path2);
}
return (path1 + path2);
}
public bool IsPathRooted(string path)
{
if (path != null)
{
CheckInvalidPathChars(path);
int length = path.Length;
if (length >= 1 && (path[0] == _directorySeparatorChar || path[0] == _altDirectorySeparatorChar) || length >= 2 && path[1] == _volumeSeparatorChar)
{
return true;
}
}
return false;
}
internal static void CheckInvalidPathChars(string path)
{
for (int i = 0; i < path.Length; i++)
{
int num2 = path[i];
if (num2 == 0x22 || num2 == 60 || num2 == 0x3e || num2 == 0x7c || num2 < 0x20)
{
throw new ArgumentException("Argument_InvalidPathChars");
}
}
}
}
Bence System.IO.Path harika çalışıyor. Yapamayacağınız özel görevleriniz var mı? – Espo
@Espo: Sorunun ikinci cümlesini okumaya çalış. –
[Path.DirectorySeparatorChar] 'ı kullanabilir misiniz (http://msdn.microsoft.com/en-us/library/system.io.path.directoryseparatorchar.aspx)? –