Check if directory exists with dynamic path - c#

How can I check if the directory exists with a dynamic path (~) not a fixed path (C:)?
My code:
Soin_Id = Request.QueryString["SoinId"];
string path = #"~\Ordo\Soin_"+Soin_Id+#"\";
if (Directory.Exists(path))
{
ASPxFileManager_Ordo.Settings.RootFolder = path;
}
else
{
ASPxFileManager_Ordo.Settings.RootFolder = #"~\Ordo\";
}
With this condition, it's never true, even though the directory exists.

You need to use Server.MapPath to resolve dynamic path to physical path on server.
if (Directory.Exists(Server.MapPath(path)))
also consider using Path.Combine for concatenation of path.

Related

How does the system go backward one path

It's current path is C:\Users\USERNAME\OneDrive\Desktop\Pro\Professional
How do i set it to C:\Users\USERNAME\OneDrive\Desktop\Pro
But I don't set by writing string to set it back I want the system to understand where it is and go backwards.
Simply put I want it to be like the cd.. command in Windows CMD.
To get the current directory, use
var currentDirectory = Directory.GetCurrentDirectory();
To get the parent directory, use
var parentDirectory = Path.GetDirectoryName(currentDirectory);
And finally to set the current directory:
Directory.SetCurrentDirectory(parentDirectory);
There is a method in System.IO called Path.GetDirectoryName. this would take your path as input and return the parent directory of the path which you have given.
example:
string path = "C:\Users\USERNAME\OneDrive\Desktop\Pro\Professional";
string parentDirectory = Path.GetDirectoryName(path);
here, the parentDirectory now containes "C:\Users\USERNAME\OneDrive\Desktop\Pro"
if you want to go up multiple leveles you can call multiple times,
example:
string path = #"C:\Users\USERNAME\OneDrive\Desktop\Pro\Professional";
string parentDirectory = Path.GetDirectoryName(Path.GetDirectoryName(path));
the parentDirectory now containes "C:\Users\USERNAME\OneDrive\Desktop"

System.UnauthorizedAccessException error? I tried the Envirorment.getfolderpath/running as admin, but nothing works

static void SendMail()
{
String SystemErrors = DateTime.Now.ToString("d");
String filepath = #"C:\Windows\Boot\";
string filepath2 = filepath + #"\SystemErrors\somefile.text";
{
if (!Directory.Exists(filepath2))
Directory.CreateDirectory(#"c:\Windows\Boot\SystemErrors\somefile.txt");
if (!File.Exists(filepath2))
File.Create(filepath2);
}
Im trying to create a new folder and file.text, but nothing seems to work.
I don't think you're using the Exists methods correctly.
You must call File.Exists when you want to check if a file exists, and you must provide the path to the file.
Directory.Exists must be called when you want to check if a directory exists, and you must provide the path to the directory.

File does not exist - ExplorerBrowser from WindowsApiCodePack

I'm trying to set a default-folder when I open my ExplorerBrowser.
if (Direcory.Exists(folderPath))
{
var folderPathFile = ShellFile.FromFilePath(folderPath);
Eb.ExplorerBrowserControl.Navigate(folderPathFile);
}
Funny thing that the method throws an "FileNotFoundException" even if Directory.Exists returns true.
The FromFilePath-Method looks like:
internal ShellFile(string path)
{
// Get the absolute path
string absPath = ShellHelper.GetAbsolutePath(path);
// Make sure this is valid
if (!File.Exists(absPath))
throw new FileNotFoundException(string.Format("The given path does not exist ({0})", path));
ParsingName = absPath;
Path = absPath;
}
I'm not quite sure what "GetAbsolutePath(path)" does, but my path already is absolute. Does it maybe destroy my functional path by calling this method? How can I solve this issue?
The folderPath variable, when passed to Directory.Exists() returns true, so this is a directory path (file paths passed to this method return false).
This same value is passed into ShellFile.FromFilePath(), the absolute value of the path is obtained, and this is then passed into File.Exists -- but, as above, it is a directory path, hence false is returned.

If a folder does not exist, create it

I use a FileUploader control in my application. I want to save a file to a specified folder. If this folder does not exist, I want to first create it, and then save my file to this folder. If the folder already exists, then just save the file in it.
How can I do this?
Use System.IO.Directory.CreateDirectory.
According to the official ".NET" docs, you don't need to check if it exists first.
System.io   >   Directory   >   Directory.CreateDirectory
Any and all directories specified in path are created, unless they already exist or unless some part of path is invalid. If the directory already exists, this method does not create a new directory, but it returns a DirectoryInfo object for the existing directory.
        — learn.microsoft.com/dotnet/api/
Use the below code as per How can I create a folder dynamically using the File upload server control?:
string subPath ="ImagesPath"; // Your code goes here
bool exists = System.IO.Directory.Exists(Server.MapPath(subPath));
if(!exists)
System.IO.Directory.CreateDirectory(Server.MapPath(subPath));
Just write this line:
System.IO.Directory.CreateDirectory("my folder");
If the folder does not exist yet, it will be created.
If the folder exists already, the line will be ignored.
Reference: Article about Directory.CreateDirectory at MSDN
Of course, you can also write using System.IO; at the top of the source file and then just write Directory.CreateDirectory("my folder"); every time you want to create a folder.
Directory.CreateDirectory explains how to try and to create the FilePath if it does not exist.
Directory.Exists explains how to check if a FilePath exists. However, you don't need this as CreateDirectory will check it for you.
You can create the path if it doesn't exist yet with a method like the following:
using System.IO;
private void CreateIfMissing(string path)
{
bool folderExists = Directory.Exists(Server.MapPath(path));
if (!folderExists)
Directory.CreateDirectory(Server.MapPath(path));
}
This method will create the folder if it does not exist and do nothing if it exists:
Directory.CreateDirectory(path);
You can use a try/catch clause and check to see if it exist:
try
{
if (!Directory.Exists(path))
{
// Try to create the directory.
DirectoryInfo di = Directory.CreateDirectory(path);
}
}
catch (IOException ioex)
{
Console.WriteLine(ioex.Message);
}
using System.IO
if (!Directory.Exists(yourDirectory))
Directory.CreateDirectory(yourDirectory);
if (!Directory.Exists(Path.GetDirectoryName(fileName)))
{
Directory.CreateDirectory(Path.GetDirectoryName(fileName));
}
The following code is the best line(s) of code I use that will create the directory if not present.
System.IO.Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/temp/"));
If the directory already exists, this method does not create a new directory, but it returns a DirectoryInfo object for the existing directory. >
Create a new folder, given a parent folder's path:
string pathToNewFolder = System.IO.Path.Combine(parentFolderPath, "NewSubFolder");
DirectoryInfo directory = Directory.CreateDirectory(pathToNewFolder);
// Will create if does not already exist (otherwise will ignore)
path to new folder given
directory information variable so you can continue to manipulate it as you please.
Use this code if the folder is not presented under the image folder or other folders
string subPath = HttpContext.Current.Server.MapPath(#"~/Images/RequisitionBarCode/");
bool exists = System.IO.Directory.Exists(subPath);
if(!exists)
System.IO.Directory.CreateDirectory(subPath);
string path = HttpContext.Current.Server.MapPath(#"~/Images/RequisitionBarCode/" + OrderId + ".png");
Use the below code. I use this code for file copy and creating a new folder.
string fileToCopy = "filelocation\\file_name.txt";
String server = Environment.UserName;
string newLocation = "C:\\Users\\" + server + "\\Pictures\\Tenders\\file_name.txt";
string folderLocation = "C:\\Users\\" + server + "\\Pictures\\Tenders\\";
bool exists = System.IO.Directory.Exists(folderLocation);
if (!exists)
{
System.IO.Directory.CreateDirectory(folderLocation);
if (System.IO.File.Exists(fileToCopy))
{
MessageBox.Show("file copied");
System.IO.File.Copy(fileToCopy, newLocation, true);
}
else
{
MessageBox.Show("no such files");
}
}
A fancy way is to extend the FileUpload with the method you want.
Add this:
public static class FileUploadExtension
{
public static void SaveAs(this FileUpload, string destination, bool autoCreateDirectory) {
if (autoCreateDirectory)
{
var destinationDirectory = new DirectoryInfo(Path.GetDirectoryName(destination));
if (!destinationDirectory.Exists)
destinationDirectory.Create();
}
file.SaveAs(destination);
}
}
Then use it:
FileUpload file;
...
file.SaveAs(path,true);
string root = #"C:\Temp";
string subdir = #"C:\Temp\Mahesh";
// If directory does not exist, create it.
if (!Directory.Exists(root))
{
Directory.CreateDirectory(root);
}
The CreateDirectory is also used to create a sub directory. All you have to do is to specify the path of the directory in which this subdirectory will be created in. The following code snippet creates a Mahesh subdirectory in C:\Temp directory.
// Create sub directory
if (!Directory.Exists(subdir))
{
Directory.CreateDirectory(subdir);
}
Derived/combined from multiple answers, implementing it for me was as easy as this:
public void Init()
{
String platypusDir = #"C:\platypus";
CreateDirectoryIfDoesNotExist(platypusDir);
}
private void CreateDirectoryIfDoesNotExist(string dirName)
{
System.IO.Directory.CreateDirectory(dirName);
}

How to get just folder path without the actual folder name?

I am wondering how I can get the file path, 1 level above the folder passed into a string.
So I have the following code:
foreach (DirectoryInfo directory in rootDir.GetDirectories())
{
string test = directory.FullName;
}
This returns the directory name including the folder name so it is returning this:
c:\test\FolderName
Where FolderName is the name of the directory object.
How would I get only c:\test?
You're looking for the directory.Parent property.
string test = Path.GetDirectoryName(directory.FullName);

Categories

Resources