“无法创建目录,因为目录不存在”

时间:2018-10-23 09:04:51

标签: c#

这是我的logging.cs,通常可以在用户桌面中创建“日志文件夹”和Datetime.csv。

home.ctp

在我的主类中,我使用记录日志的方法只是将“ Test”输入到csv文件中

public static class Logging
{
    public static string _Path = $"C:\\Users\\{Environment.UserName}\\Desktop\\Logs\\{DateTime.Now.ToString("dd.MM.yyyy")}.csv";
    static StreamWriter _File = new StreamWriter(_Path);

    public static void getPath(string path)
    {
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
    }

    public static void logging(string message)
    {
        _File.Write(message);
    }
}

但是当没有“ Logs-Folder”时,我得到一个例外,即路径的一部分不存在。如果我手动创建路径,则会得到该路径已经存在的例外,因此Logging类中的If-Statement出了点问题。但是我不知道到底是怎么回事

4 个答案:

答案 0 :(得分:4)

您的路径是文件而不是目录。您需要从路径

创建目录
    String Path = $"C:\\Users\\{Environment.UserName}\\Desktop\\Logs\\{DateTime.Now.ToString("dd.MM.yyyy")}.csv";

    String Directory = System.IO.Path.GetDirectoryName(Path);

    if (System.IO.Directory.Exists(Directory)==false) {
      System.IO.Directory.CreateDirectory(Directory);
    }

    if (System.IO.File.Exists(Path)==false) {
      System.IO.File.Create(Path);
    }

答案 1 :(得分:1)

您的_Path变量实际上不是目录,而是文件名。

您使用System.IO.Path.GetDirectoryName(_Path)

获取目录

答案 2 :(得分:1)

您的测试是否存在目录,但提供了文件路径。这是一些您可以用来修复它的代码:

public static string _Path = $"C:\\Users\\{Environment.UserName}\\Desktop\\Logs";
public static string _Filename = $"{DateTime.Now.ToString("dd.MM.yyyy")}.csv";
static StreamWriter _File = new StreamWriter(_File);

答案 3 :(得分:1)

尝试以不同的方式使用DirectoryPathFilePath

将您的StreamWriter移到方法范围内,以便我们在文件中Write内容之后关闭此流。

public static class Logging
{
    public static string _DirectoryPath = $"C:\\Users\\{Environment.UserName}\\Desktop\\Logs";
    public static string _FileName = $"{DateTime.Now.ToString("dd.MM.yyyy")}.csv";

    public static void getPath(string path)
    {
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
    }

    public static void logging(string message)
    {
        StreamWriter _sw = new StreamWriter(_DirectoryPath + "\\" + _FileName);
        _sw.Write(message);
        _sw.Flush();
        _sw.Close();
    }
}

Program.cs开始。

Logging.getPath(Logging._DirectoryPath);
Logging.logging("Test");

输出:

enter image description here