8

I have a function that automatically creates a specified Path by determining whether the String Path is a File or Directory.

Normally, i would use this if the path already exists:

FileAttributes attributes = File.GetAttributes("//Path");

if ((attributes & FileAttributes.Directory) == FileAttributes.Directory)
    {
        Directory.CreateDirectory("//Path");
    }

But what if it doesn't? How to check whether the String Path is a File or Directory if it doesn't exist?

14
  • 6
    File.Exists and Directory.Exists Commented Sep 22, 2014 at 13:57
  • 2
    You want to check something that does not even exist? If you want to check if a given name is a valid filename you may simply check if it has an extension, if not it might be a directory. Commented Sep 22, 2014 at 13:58
  • 2
    Yes i want to treat the Path as a String and check if that String represents a File type of path or a Directory type of path Commented Sep 22, 2014 at 13:59
  • 3
    @Hossam, A directory can have a name like File1.xml, there is no way for you to check if the string is a directory or a file. You need to rethink what you are trying to do. You may treat strings without an extension as a directory. But there is no such restriction at OS side. Similarly OS would allow a file name without any extension, e.g. Directory1 is a valid file name. one way to check it would be if your path ends with / that means that the path explicitly point to a directory. But again, you can have paths without / at end and it can still point to a directory. Commented Sep 22, 2014 at 14:01
  • 2
    @MetroSmurf i can not use File.Exists or Directory.Exists if there's nothing actually to check at all Commented Sep 22, 2014 at 14:01

2 Answers 2

7

If files in your scenario must have extensions then you could use this method.

NOTE: It is legal in windows to have periods in directories, but this was mostly introduced for cross operating system compatibility of files. In strictly windows environments it is considered bad form to have files without extensions or to put periods or spaces in directory names. If you do not need to account for that scenario then you could use this method. If not you would have to have some sort of flag sent through the chain or a structure to identify the intent of the string.

var ext = System.IO.Path.GetExtension(strPath);
if(ext == String.Empty)
{
    //Its a path
}

If you do not need to do any analysis on file type you can go as simple as:

if(System.IO.Path.HasExtension(strPath))
{
    //It is a file
}
Sign up to request clarification or add additional context in comments.

6 Comments

A little modification to be Boolean Extention = System.IO.Path.HasExtension("//Path")
+0: Note: while this approach may work for OP it is wrong: there is no restrictions on folder names to not include dot. It is perfectly ok to have folder named "MyImages.jpg" or "Game.Saves".
@AlexeiLevenkov This was needed for the Application usage and not involving the Userand as for, it is not possible for the a Directory to include an Extension signature
@AlexeiLevenkov Your point is moot though. System.IO.Path.GetExtension is smart enough to start from the end of the string and identify if there is an extensions before the first directory separator. If your files must have extensions this method works fine.
this method will not work if a file have no extension
|
2

The short answer is that there is no 100% way to distinguish a folder from a file by path alone. A file does not have to have a file extension, and a folder can have periods in its name (making it look like a file extension).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.