patd1
asked on
create file and append it
I want to catch exceptions in a log file. I want to name my log file by date. If the file exists, it should append to it, if file does not exist, it should create one. I tried the following code but get error access to path is denied. I have shared the logs folder and given full control to every one. Please suggest what needs to be done.
I am getting the correct FileName as 11-11-2010.txt and Fullname (with path) as \\myserver\Projects\Result s\Logs\11- 11-2010.tx t
Error: Access to the path '\\myserver\Projects\Resul ts\Logs\11 -11-2010.t xt' is denied.
Thank You
I am getting the correct FileName as 11-11-2010.txt and Fullname (with path) as \\myserver\Projects\Result
Error: Access to the path '\\myserver\Projects\Resul
Thank You
public void WriteLog(string TextStr)
{
string FilePath = ConfigurationManager.AppSettings["LogPath"].ToString();
//Set Filename By Date
string FileName = DateTime.Now.ToString("MM-dd-yyyy") + ".txt";
string FullName = FilePath + FileName;
//if file does not exist, create one
if (!File.Exists(FullName))
{
FileStream fileStream = new FileStream(@FullName, FileMode.Append);
}
StreamWriter SW;
SW = File.AppendText(FullName);
SW.WriteLine(TextStr);
SW.Close();
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Another small problem though:
For the new line character I am adding "\\n" to the string, but it is simply writing \n to the file. what do I do to make it write a new line character?
Thanks
For the new line character I am adding "\\n" to the string, but it is simply writing \n to the file. what do I do to make it write a new line character?
Thanks
When you put two backslashes together it means "interpret this as a single backslash character, not an escape sequance"
So "\\n" = \n
and "\n" = newline
But, you probably want "\r\n" which is the normal line termination sequence in Windows, or you can use Environment.NewLine - e.g. WriteLine("Hello World!" + Environment.NewLine);
So "\\n" = \n
and "\n" = newline
But, you probably want "\r\n" which is the normal line termination sequence in Windows, or you can use Environment.NewLine - e.g. WriteLine("Hello World!" + Environment.NewLine);
ASKER
I tried both "\r\n" and Environment.NewLine
Both write \n in my text file
see example:
\nMain Method In ResultGenerator\nCaseNo not passed in.\nSystem.IndexOutOfRang eException : Index was outside the bounds of the array.
at ResultGenerator.ResultGene rator.Main (String[] args) in E:\Projects\ResultGenerato r\ResultGe nerator.cs :line 20
Both write \n in my text file
see example:
\nMain Method In ResultGenerator\nCaseNo not passed in.\nSystem.IndexOutOfRang
at ResultGenerator.ResultGene
If you start a string with "@" then no escape sequences are recognized.
e.g.
@"Hello\r\nWorld" = Hello\r\nWorld
"Hello\r\nWorld" = Hello <newline> World
I recommend you use the String.Format method,
string message = String.Format("{0}\r\n{1}\ r\n{2}", "Main Method in ResultGen", "CaseNo not passed", ex.Message);
e.g.
@"Hello\r\nWorld" = Hello\r\nWorld
"Hello\r\nWorld" = Hello <newline> World
I recommend you use the String.Format method,
string message = String.Format("{0}\r\n{1}\
ASKER
mas_oz2003:
Thanks for pointing me to alternate soultions for logging. Is it a good idea to write to OS event log?
Any disadvantages?
Thanks for pointing me to alternate soultions for logging. Is it a good idea to write to OS event log?
Any disadvantages?
You need to call your file using a lock or a mutex:
use lock if your program is multithreaded.
public void WriteLog(string TextStr)
{
string FilePath = ConfigurationManager.AppSe
//Set Filename By Date
string FileName = DateTime.Now.ToString("MM-
string FullName = FilePath + FileName;
//check if file exists, else create one
lock(this)
{
FileStream fileStream = new FileStream(@FullName, FileMode.Append);
StreamWriter SW;
SW = File.AppendText(FullName);
SW.WriteLine(TextStr);
SW.Close();
}
}
else use mutex
http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx
Alternatives: use Trace class and specify your file, log framework (log4net)
http://stackoverflow.com/questions/1260157/whats-the-most-widely-used-logging-framework-in-c