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

时间:2019-02-05 11:59:00

标签: c# directory storage streamwriter

不好意思的标题的道歉

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

我试图不指定要写入的驱动器,以希望它将默认为现有驱动器,因为特定位置对于我的需求而言并不重要。即"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的知识不是特别了解,因此该解决方案可能非常简单,但会有所帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用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");

答案 1 :(得分:1)

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

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

请注意,除了获取适用于特定计算机的文件夹路径外,您还需要注意目录的权限。特别是如果您在Program Files下安装应用程序,则由于权限的原因,第一个选项可能不起作用。