What is the best way to combine a path with a filename?
That is, given c:\foo
and bar.txt
, I want c:\foo\bar.txt
.
Given c:\foo
and ..\bar.txt
, I want either an error or c:\foo\bar.txt
(so I cannot use Path.Combine()
directly). Similarly for c:\foo
and bar/baz.txt
, I want an error or c:\foo\baz.txt
(not c:\foo\bar\baz.txt
).
I realize, I could check that the filename does not contain '\' or '/', but is that enough? If not, what is the correct check?
To extract filename from the file, we use “GetFileName()” method of “Path” class. This method is used to get the file name and extension of the specified path string. The returned value is null if the file path is null.
A file name is a name a particular inode is called inside a particular directory. A path is some instructions for how to reach an inode from a known point.
To check whether the specified file exists, use the File. Exists(path) method. It returns a boolean value indicating whether the file at the specified path exists or not.
If you want "bad" filenames to generate an error:
if (Path.GetFileName(fileName) != fileName) { throw new Exception("'fileName' is invalid!"); } string combined = Path.Combine(dir, fileName);
Or, if you just want to silently correct "bad" filenames without throwing an exception:
string combined = Path.Combine(dir, Path.GetFileName(fileName));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With