Как всегда писать на существующий локальный диск, используя C # StreamWriter - PullRequest
0 голосов
/ 05 февраля 2019

Извиняюсь за плохую формулировку заголовка,

В моей программе на 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 голосов
/ 05 февраля 2019

Чтобы справиться с различными дисками на разных машинах, у вас есть несколько вариантов:

  • Использовать относительные пути к файлам, например, locationFile = "wLocation.txt" запишет файл в текущий каталог.
  • Используйте специальную папку, например Documents или AppData.Вы можете использовать метод Environment.GetFolderPath , чтобы получить один из этих каталогов и создать полный путь, например: locationFile = Path.Combine(sysFolderPath, "wLocation.txt");.
  • Сделайте папку настраиваемой в вашем приложении.

Обратите внимание, что помимо получения пути к папке, которая работает на конкретном компьютере, вам также необходимо обратить внимание на разрешения каталога.Особенно первый вариант может не работать из-за разрешений, если вы устанавливаете приложение под Program Files.

0 голосов
/ 05 февраля 2019

Вы можете использовать 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...