I'm coding in VC++.NET 2003. I have a class that needs a log file to log info and errors for debugging. The problem I have is that FileStream and StreamWriter can not be global. I get compiler error C3145 : cannot declare a global or static managed type object or a __gc pointer. A workaround was to open, write, and then close the log file in every function/event. During testing, I discovered that this won't work since other functions/events may be executed before the previous function/event has closed the file. Any suggestions?

FileStream* fs = new FileStream(S"c:\\Variables.txt", FileMode::Append, FileAccess::Write, FileShare::Write);
  StreamWriter* sw = new StreamWriter(S"c:\\Variables.txt", true, Encoding::ASCII);
  String* NextLine=S"This is the appended line.";
12 Years
Discussion Span
Last Post by Ancient Dragon

I got it. Create a function that opens the file/stream, writes to it, and closes the file/stream. Pass in the string to be logged. So, instead of writing directly to the file, call the function.


I do similar, but I put that log function in another thread so that it doesn't slow down other processing. you can put the log requests into a queue, then the log function can take its own sweet time processing them. Also, I always close the file when the last item in the queue has been logged.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.