C#控制台应用程序在通过命令行调用时不会写入文件,但否则会写入文件

时间:2019-03-11 16:28:29

标签: c# logging console

我有一个带有参数的小型控制台应用程序。我使用一种方法将一些信息作为日志抛出到文件中。很简单:

        static void Log(string str)
        {
            using (StreamWriter sw = new StreamWriter("log.txt", true))
            {
                sw.WriteLine(str);
            }
        }

但是,当通过命令行调用运行该程序时,该程序将运行,但是日志文件未修改。

如果该应用是通过资源管理器启动或在Visual Studio中调试运行的,则日志记录有效。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试定义完整的写入路径,例如:C:\Users\user\Documents\log.txt

答案 1 :(得分:0)

new StreamWriter("log.txt", true)写入当前工作目录,该目录可能在任何地方,包括网络共享或您没有写访问权的位置。始终指定任何文件的完整路径。如果要写入文件,则需要确保写入具有访问权限的位置。不要仅仅以管理员身份运行您的应用,这会打开各种安全漏洞。

您可能想要类似的东西:

var p = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "myAppName");
if (!Directory.Exists(p)) Directory.CreateDirectory(p);
using (var sw = new StreamWriter(Path.Combine(p, "log.txt"), true)
{
    sw.WriteLine(str);
}