调用时无法识别或使用 C# 路径 File.AppendAllText

C# Path not recognized or utilized when invoking File.AppendAllText

我正在尝试使用文件 class 在控制台和 winforms 桌面应用程序中处理文本文件,但出现以下异常: “_Library.Logging”的类型初始值设定项抛出异常

根据我在此处阅读的内容,此错误通常是由 App.config 中的 Winfoms 应用程序问题引起的,但异常详细信息似乎指向其他地方:

System.ArgumentNullException: 值不能为空。参数名称:路径

在System.IO.File.AppendAllText(字符串路径,字符串内容)

文件操作的 MSDN 示例都对路径参数进行了硬编码,而没有提及使用 App.confiig 文件,因此我的假设是可以在不涉及 ConfigurationManager 的情况下执行此操作。

这是我正在尝试使用的代码

// in calling method
class Program_Console
{
    private static StringBuilder SB4log = new StringBuilder();
    public static void Main(string[] tsArgs)
    {
        // Conditionals dealing with argumentts from Task Scheduler
        Save2Log("Calling _UI.exe via \"Process.Start()\"", true);
        // try-catch-finally for Process.Start
    }
    private static void Save2Log(string msgTxt, bool noTS)
    {
        SB4log.AppendLine($"{msgTxt}");
        if (noTS) Logging.SaveLog(SB4log);
        else Logging.SaveLog_TimeStamp(SB4log);
        SB4log.Clear();
    }
}

// saving app progression messages to a single log txt file
public static class Logging
{
    private static String filePath = Connections.LogPath();
    private static StringBuilder SB4log = new StringBuilder();

    public static void SaveLog(StringBuilder logTxt)
    {
        File.AppendAllText(filePath, logTxt.ToString());
        logTxt.Clear();
    }
}
    
// class for DB connection and file paths
public static class Connections
{
    private static StringBuilder SB4log = new StringBuilder();
    public static string AppPath()
    {
        string appRoot;
        try
        {
            string appDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            SaveLog($"->App Path: {appDir}", true);  // culprit
            int loc = appDir.IndexOf("BURS");
            appRoot = appDir.Substring(0, loc + 5);
        }
        catch (Exception ex)
        {   
        // Exception response and MessageBox
        }
        return appRoot;
    }
    public static string ConsolePath() {}
    public static string UIPath() {}
    public static string LogPath()
    {
        string appRoot = AppPath();
        string wrkDir = @"_Library\Data\BURS_Log.Txt";
        string fullDir = $"{appRoot}{wrkDir}";
        SaveLog($"->Log Path: {fullDir}\n", true); // culprit
        return fullDir;
    }
}

在逐步执行代码时,包含路径的变量的代码 -- filePath -- 具有预期值:“D:\BURS_Library\Data\BURS_Log.Txt”(引号用于显示没有不需要的空格被修剪)。根据 MSDN 的说法,如果它是格式错误的路径,将抛出异常,但该路径对我来说看起来有效。

为什么没有使用 Path 变量?

任何帮助将不胜感激。

编辑:扩展代码以显示从开始到结束的流程,因为原始的删节版本似乎令人困惑。已将文本“//culprit”添加到导致响应者指出的错误的两行。

不清楚 Connections 是什么,但给定 Connections.LogPath(); 看来您正在调用 LogPath(); 来设置 filePath 的值,这是一个问题,因为调用 AppPath 具有以下语句 SaveLog($"->App Path: {appDir}", true);.

您没有包含具有 2 个参数的 SaveLog 版本,但假设它与您发布的版本相似,您正在尝试使用 filePath 时值没有尚未设置 - 这会导致问题。