JamesBrownIsDead
JamesBrownIsDead

Reputation: 107

.NET: System.IO.Path

Given a string that is to a directory, how can I make sure there's a closing \ character? For example, C:\foo is a directory, and so is C:\foo\. Is there a System.IO.Path method that ensures there's a ending \?

Upvotes: 3

Views: 617

Answers (4)

to StackOverflow
to StackOverflow

Reputation: 124746

Presumably you want to append a separator so that you can subsequently append filenames using string concatenation.

In which case Kyle Rozendo's initial advice is sound: consider whether you really need to do that. If you always append filenames using Path.Combine, you don't need to care whether your path has a trailing separator.

If you still want to do this, you have an edge case to consider. The path "D:" is a valid relative path that references the current working directory on the D: drive. Appending a separator will change this meaning to reference the root directory on the D: drive. Do you really want this? I'm guessing not. So I would special case this thus:

public static string AppendSeparator(string path)
{
    if (path == null) throw new ArgumentNullException("path");
    if (path.Length == 0) return path;
    if (path[path.Length - 1] == Path.VolumeSeparatorChar) return path;
    if (path[path.Length - 1] == Path.DirectorySeparatorChar) return path;
    if (path[path.Length - 1] == Path.AltDirectorySeparatorChar) return path;
    return path + Path.DirectorySeparatorChar;
}

You can then use this as follows - the last example converts the input path to an absolute path before appending the separator:

path = AppendSeparator(@"C:\SomePath\");
path = AppendSeparator(@"C:\SomePath");
path = AppendSeparator(@"D:");
path = AppendSeparator(Path.GetFullPath("D:"));

Upvotes: 3

Jason Williams
Jason Williams

Reputation: 57922

if (!filename.EndsWith(Path.DirectorySeparatorChar))
    filename += Path.DirectorySeparatorChar;

Upvotes: 6

amr osama
amr osama

Reputation: 1159

Hay, what about using this condition

if (s.IndexOf('\\') == s.Length - 1)

where s is your path string "amr\" will give true "amr" will give false

Upvotes: 0

Related Questions