Записать текстовый файл в подпапку

Я пытаюсь записать текстовый файл в: C:\Test folder\output\, но не вставляя C:\.

i.e.

Это то, что у меня есть на данный момент, которое в настоящее время работает, но имеет C:\ в начале.

StreamWriter sw = new StreamWriter(@"C:\Test folder\output\test.txt");

Я действительно хочу записать файл в выходную папку, но без необходимости иметь C:\ впереди.

Я пробовал следующее, но моя программа просто зависает (не записывает файл):

(@"\\Test folder\output\test.txt");

(@".\Test folder\output\test.txt");

("//Test folder//output//test.txt");

("./Test folder//output//test.txt");

В любом случае, я мог бы это сделать?

Спасибо.


person Kevdog777    schedule 12.11.2012    source источник
comment
Вы хотите, чтобы эта подпапка находилась в корне текущего диска, или вы ищете что-то еще? (т.е. создать подпапку в каталоге приложений).   -  person e4rthdog    schedule 12.11.2012
comment
Почему вы хотите удалить C:\?   -  person Rob    schedule 12.11.2012
comment
@e4rthdog: у меня уже создана подпапка, я просто хочу, чтобы текстовый файл был записан в эту папку сейчас.   -  person Kevdog777    schedule 12.11.2012
comment
в чем проблема с:? (почему вы не хотите включать это?) - на первое ответил habib (\\ = networkshare), второе работает, только если в вашем рабочем каталоге есть тестовая папка и вывод, 3 и 4 - это просто * nix-варианты из 1 и 2...   -  person Random Dev    schedule 12.11.2012
comment
@Robuust: потому что мне нужно отправить свою программу другим людям (в моей компании), чтобы они могли просто использовать ее в папке, в которой она у меня есть.   -  person Kevdog777    schedule 12.11.2012
comment
А если у вас 3 локальных жестких диска, как приложение узнает, куда вы хотите записать? Я не могу понять, как вы исключаете букву диска в своей логике, извините   -  person e4rthdog    schedule 12.11.2012
comment
Приложение должно знать, где находится само приложение   -  person Kevdog777    schedule 12.11.2012
comment
Спасибо, все еще не работает. Мне придется подумать о том, как я подхожу к этому, и снова подходить к этому по-другому.   -  person Kevdog777    schedule 12.11.2012
comment
что вы имеете в виду под зависаниями? должно произойти какое-то исключение.. если это так, отправьте сообщение об ошибке здесь.   -  person Mr_Green    schedule 12.11.2012


Ответы (4)


Я понимаю, что вы хотели бы записать данные в указанную папку. Первый способ — указать папку в коде или через конфигурацию.

Если вам нужно записать на определенный диск или текущий диск, вы можете сделать следующее

string driveLetter = Path.GetPathRoot(Environment.CurrentDirectory);
string path = diveLetter + @"Test folder\output\test.txt";
StreamWriter sw = new StreamWriter(path);

Если каталог должен относиться к текущему каталогу приложения, пользователь AppDomain.CurrentDomain.BaseDirectory получает текущий каталог и использует комбинацию ../ для перехода к нужной папке.

person Kami    schedule 12.11.2012
comment
Круто, надо будет. теперь это работает, но это также похоже на использование C: \ - мне придется использовать C: \ на данный момент. Спасибо - person Kevdog777; 12.11.2012

Вы можете использовать System.IO.Path.GetDirectoryName, чтобы получить каталог вашего запущенного приложения, а затем вы можете добавить к нему остальную часть пути.

Я не совсем понимаю, чего вы хотите от этого вопроса, надеюсь, это понятно.

person e4rthdog    schedule 12.11.2012

Распространенным методом является создание каталога относительно каталога времени выполнения вашего exe, например, подкаталога, например:

string exeRuntimeDirectory = 
    System.IO.Path.GetDirectoryName(
        System.Reflection.Assembly.GetExecutingAssembly().Location);

string subDirectory = 
    System.IO.Path.Combine(exeRuntimeDirectory, "Output");
if (!System.IO.Directory.Exists(subDirectory))
{
    // Output directory does not exist, so create it.
    System.IO.Directory.CreateDirectory(subDirectory);
}

Это означает, что где бы ни был установлен исполняемый файл, он создаст подкаталог «Вывод», в который затем сможет записывать файлы.

Он также имеет то преимущество, что хранит исполняемый файл и его выходные файлы вместе в одном месте, а не разбросаны по всему месту.

person Polyfun    schedule 12.11.2012

Спасибо за помощь, ребята.

Мой коллега тоже вмешался и помог, но @Kami тоже очень помог.

Теперь он работает, когда у меня есть:

string path = string.Concat(Environment.CurrentDirectory, @"\Output\test.txt");

Как он сказал: «CurrentDirectory — это место, откуда запускается программа.

person Kevdog777    schedule 12.11.2012