I am processing a TreeView
of directories and files. A user can select either a file or a directory and then do something with it. This requires me to have a method which performs different actions based on the user's selection.
At the moment I am doing something like this to determine whether the path is a file or a directory:
bool bIsFile = false; bool bIsDirectory = false; try { string[] subfolders = Directory.GetDirectories(strFilePath); bIsDirectory = true; bIsFile = false; } catch(System.IO.IOException) { bIsFolder = false; bIsFile = true; }
I cannot help to feel that there is a better way to do this! I was hoping to find a standard .NET method to handle this, but I haven't been able to do so. Does such a method exist, and if not, what is the most straightforward means to determine whether a path is a file or directory?
To check if the path you have is a file or directory, import os module and use isfile() method to check if it is a file, and isdir() method to check if it is a directory.
Instead, open() the file read-only first and use fstat() . If it's a directory, you can then use fdopendir() to read it. Or you can try opening it for writing to begin with, and the open will fail if it's a directory.
A Directory is a disk file that contains reference information to other files. or in simple words, it is a folder. A Path is just a string wrapped in a Path Class in C# which facilitates us with many different conventions depending on the operation system.
From How to tell if path is file or directory:
// get the file attributes for file or directory FileAttributes attr = File.GetAttributes(@"c:\Temp"); //detect whether its a directory or file if ((attr & FileAttributes.Directory) == FileAttributes.Directory) MessageBox.Show("Its a directory"); else MessageBox.Show("Its a file");
Per the comments below, if you are on .NET 4.0 or later (and maximum performance is not critical) you can write the code in a cleaner way:
// get the file attributes for file or directory FileAttributes attr = File.GetAttributes(@"c:\Temp"); if (attr.HasFlag(FileAttributes.Directory)) MessageBox.Show("Its a directory"); else MessageBox.Show("Its a file");
How about using these?
File.Exists(); Directory.Exists();
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