如何始终使用 C# StreamWriter 写入现有的本地驱动器

How to always write to an existing local drive using C# StreamWriter

对于糟糕的标题措辞表示歉意,

我在我的 C# 程序中设置了一个 StreamWriter,它创建并写入本地存储驱动器上的多个文本文件。问题是当我在多台机器上测试这个程序时 - 驱动器的名称在机器之间不一致并且并不总是有 C: , D: 等。结果我在尝试写入驱动器时遇到错误不存在。

我试图不指定要写入的驱动器,希望它将默认为现有驱动器,因为具体位置对我的需要并不重要。 IE。 "C:\wLocation.txt" 变为 "wLocation.txt" 但这似乎没有解决任何问题。

代码:

public static string getWeatherLocation()
    {
        String locationFile = "C:\wLocation.txt";
        String location;

        try
        {
            System.IO.StreamReader reader = new StreamReader(locationFile);
            location = reader.ReadLine();
            reader.Close();
            return location;
        }
        catch (Exception ex)
        {
            return null;
        }
    }

我对 StreamWriter 不是特别了解,所以解决方案可能相当简单,但如有任何帮助,我们将不胜感激。

您可以使用 System.IO.DriveInfo.GetDrives 获取计算机上的驱动器列表:

DriveInfo[] allDrives = DriveInfo.GetDrives();

foreach (DriveInfo d in allDrives)
{
    Console.WriteLine(d.Name); //C:\ etc.
}

然后您可以简单地组合给定卷标的文件名和您想要的文件名:

var filePath = d.Name + "filename.txt";

或更好:

var filePath = Path.Combine(d.Name, "filename.txt");

为了应对不同机器上的不同驱动器,您有几种选择:

  • 使用相对文件路径,例如locationFile = "wLocation.txt" 将文件写入当前目录。
  • 使用特殊文件夹,例如文档或 AppData。您可以使用 Environment.GetFolderPath 方法获取这些目录之一并创建完整路径,如下所示:locationFile = Path.Combine(sysFolderPath, "wLocation.txt");
  • 使文件夹在您的应用程序中可配置。

请注意,除了获取适用于特定机器的文件夹路径外,您还需要注意目录的权限。特别是如果您在 Program Files 下安装应用程序,第一个选项可能会因权限问题而无法使用。