无法在ApplicationData文件夹上写入

时间:2016-09-16 09:23:17

标签: c#

我编写了一个Logger类来帮助我创建一个包含所有应用程序异常的日志文件,实际上我将这个日志保存在ApplicationData中,所以我创建了一个简单的类:

public class Logger
{

    private static string _appDataPath =
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

    private static string _logPath = _appDataPath + "\\MyApp\\Log";

    public static void log(string lines)
    {
        if (!File.Exists(_logPath)) 
        {
            Directory.CreateDirectory(_logPath);
        }

        using (StreamWriter file = new StreamWriter(_logPath))
        {
            file.WriteLine(lines);
            file.Close();
        };
    }
}

因此,当我致电:Roaming时,您如何看到我正在使用用户AppData内的Logger.log("some exception message");文件夹:我接受了这一行:

using (StreamWriter file = new StreamWriter(_logPath))

这个例外:

  

System.UnauthorizedAccessException的

也许我需要为该文件夹设置一些权限?或者我无法正确访问此路径?感谢。

2 个答案:

答案 0 :(得分:1)

您的代码会创建一个名为

文件夹

%APPDATA%\ MyApp的\登录

当然,作为一个文件夹而不是文件,StreamWriter无法写入文件夹

更改代码以将文件名添加到文件夹

main.cpp:21:3: warning: exception of type 'EB' will be caught
   catch(EB&) // why not me? every time?
   ^~~~~
main.cpp:17:3: warning:    by earlier handler for 'EA'
   catch(EA&) // caught here??
   ^~~~~

答案 1 :(得分:1)

您的_logPath变量指向您想要的目录,因此您应使用Directory.Exists而不是File.Exists检查其存在。

此外,您需要指定要创建的文件的路径,而不仅仅指定目录。因此,在我的示例代码中,我声明了变量_logFileName,它指定了要创建的日志文件的名称。

这是您的课程需要的样子:

public class Logger
{
    private static string _appDataPath =
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

    private static string _logPath = _appDataPath + "\\MyApp\\Log";
    private static string _logFileName = "logfile.txt";

    public static void log(string lines)
    {
        if (!Directory.Exists(_logPath))
        {
            Directory.CreateDirectory(_logPath);
        }

        using (StreamWriter file = new StreamWriter(Path.Combine(_logPath, _logFileName)))
        {
            file.WriteLine(lines);
            file.Close();
        };
    }
}