Create directory if not exists
The folder may created in your C:\
( the default drive where OS is installed). that is folder location is C:\Logs\WZCLogs\
. you can confirm that a folder is created somewhere in the drive-by executing the code again, this time the if (!Directory.Exists(FilePath))
returns true
. Since you have not specified any location the compiler assumes So. Check whether it is created or not;
You can extend the try Like this:
try
{
Directory.CreateDirectory(FilePath);
}
catch (Exception ex)
{
// handle them here
}
If the path is a wrong one definitely an exception will be thrown; I have tried with "X:\sample" which gives me the exception:
Could not find a part of the path 'X:\sample
Whereas if I tried with Logs\WZCLogs
which won't give any exception for the first time and also skip the if for the second time; Hence I found that the folder is created somewhere else;
You can make these changes to make them work:
string FilePath=Path.Combine(HostingEnvironment.ApplicationPhysicalPath, @"Logs\WZCLogs");
You need to use the absolute path when creating the directory. Try the following:
private const string FilePath = "Logs/WZCLogs/";
public void MakeLog(string text)
{
string directory = Path.Combine(HostingEnvironment.ApplicationPhysicalPath, FilePath);
Directory.CreateDirectory(directory); // no need to check if it exists
string logFile = Path.Combine(directory, DateTime.Now.ToString("ddMMyyyy") + ".txt");
if (!File.Exists(logFile))
{
FileStream f = File.Create(logFile);
f.Close();
}
using (StreamWriter sw = new StreamWriter(logFile, true))
{
sw.WriteLine(text);
sw.Close();
}
}
You do not need to check if the directory exists first as the CreateDirectory
method has no side-effects if the directory is already present. It's also good practice to use Path.Combine
rather than concatenating strings directly, but make sure the second parameter does not start with a slash.
You could also simplify your code by using the File.AppendAllText
method instead of creating a FileStream
.
private const string FilePath = "Logs/WZCLogs/";
public void MakeLog(string text)
{
string directory = Path.Combine(HostingEnvironment.ApplicationPhysicalPath, FilePath);
Directory.CreateDirectory(directory);
string logFile = Path.Combine(directory, DateTime.Now.ToString("ddMMyyyy") + ".txt");
File.AppendAllText(logFile, text + Environment.NewLine);
}