Запись в подпапку в c # - PullRequest
       6

Запись в подпапку в c #

0 голосов
/ 02 сентября 2011

У меня небольшие проблемы с записью в текстовый файл в папке, которую я пытался создать.В нем говорилось, что у меня нет доступа к пути 'C: \'

Может кто-нибудь сказать мне, почему и как это исправить?Спасибо!

string file_name = Environment.CurrentDirectory;
    file_name += @"\.";
    file_name = (string)combobox1.SelectedValue;
    file_name += @"\.";
    file_name += (string)combobox2.SelectedValue;
    TextWriter name = new StreamWriter(file_name);

РЕДАКТИРОВАТЬ: Вот новый код после ревизий ...

var location = Path.Combine(Environment.CurrentDirectory, (string)combobox1.SelectedItem);
Directory.CreateDirectory(location);
var path = Path.Combine(location, combobox2.SelectedItem);
TextWriter name = new StreamWriter(path, true);

Моя цель - записать текстовый файл в \\. Txt

Кто-нибудь может сказать мне, как?Спасибо!

Ответы [ 4 ]

1 голос
/ 02 сентября 2011

У учетной записи, под которой работает приложение, нет прав на запись в папку, в которую вы пытаетесь сохранить файл.

В этой статье рассказывается, как решить эту проблему:

http://www.phdcc.com/findinsite/instperm.htm

1 голос
/ 02 сентября 2011

Вы должны использовать Path.Combine():

var fileName = Path.Combine(Environment.CurrentDirectory, (string)comboBox1.SelectedValue,
                            (string)comboBox2.SelectedValue);

Если в тот момент это все еще не работает, по крайней мере, вы будете знать, что на самом деле это разрешения / существование /и т.п.проблема, а не проблема с тем, как вы создали имя файла.

1 голос
/ 02 сентября 2011

проверили ли вы значение file_name, чтобы убедиться в правильности пути?

вы все равно пропустили конкатенацию в строке 3

string file_name = Environment.CurrentDirectory;
    file_name += @"\.";
    file_name += (string)combobox1.SelectedValue;  // <--
    file_name += @"\.";
    file_name += (string)combobox2.SelectedValue;
    TextWriter name = new StreamWriter(file_name);
0 голосов
/ 02 сентября 2011

Решение здесь представляет собой комбинацию того, что сказали все остальные.

Как уже указывалось, эта строка:

file_name = (string)combobox1.SelectedValue;

неправильно выполняет задание (=) вместо конкатенации (+=).Это означает, что если comboxbo1.SelectedValue равно null, ваш путь становится \., который является корневым каталогом диска.

Вы должны помнить, что для SelectedValue допустимо быть null, потому что поле со списком может иметь пустой выбор.Вам нужно разобраться с этим случаем, возможно, отключив функцию сохранения до тех пор, пока в выпадающих списках не будет допустимых значений.

На самом деле это не проблема с разрешениями;маловероятно, что вам на самом деле нужно или намереваетесь писать в корневой каталог, именно поэтому вы не получили такого разрешения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...