Как получить путь из каталога в консольном приложении C#?

Скажите, что у меня есть эта файловая структура

Soultion-> Folder1-> FileIwant.html

Таким образом, это могло быть чем-то как C:\Soultion\Folder1\FilterIwant.html

Теперь я должен считать этот файл в свое приложение. Я не могу просто hardcode он с тех пор, когда я даю его кому-то еще, кого они могли бы поместить его на F: диск или что-то.

Или когда я создаю msi файл, путь мог бы полностью отличаться. Таким образом, как, как я могу сказать, возможно, берут

"Folder1\FilterIwant.html"

и используйте это для получения пути к папке независимо от того, куда они помещают его?

Править

Я попробовал Путь. GetFullPath, но я кончаюсь в мусорном ведре/каталоге отладки. Но мой файл не находится в том каталоге. Я думаю, что это - пара каталогов прежде. Также, если я сделаю msi файл, то у меня будет мусорное ведро/каталог отладки?

9
задан chobo2 9 July 2010 в 22:39
поделиться

5 ответов

Почему файл, который используется как часть вашего приложения, находится не в той же папке, что и приложение? Мне кажется, что вы должны установить свойства этого файла для копирования в выходную папку, когда вы выполняете сборку.

Это позволит убедиться, что ваш файл находится в папке bin \ debug.

РЕДАКТИРОВАТЬ: либо это, либо вы должны поместить свои файлы в одну из специальных папок, на ум приходят данные приложения или мои документы .

6
ответ дан 4 December 2019 в 13:44
поделиться

Path.GetFullPath

Edit

Путь bin / Debug не будет присутствовать при запуске установленного приложения (если вы специально не укажете установщику использовать этот подкаталог, конечно).

1
ответ дан 4 December 2019 в 13:44
поделиться

Когда Visual Studio компилирует ваш проект, она будет помещать вывод в каталог bin\debug. Любые файлы содержимого, на которые вы хотите сослаться, также должны быть скопированы в эти директории, чтобы ваше приложение, расположенное в этой директории, смогло прочитать файл.

У вас есть два варианта:

  • либо вы устанавливаете свойство Copy to Output Directory в FilterIwant. html в Copy if newer; в этом случае, если файл изменился, он будет скопирован в выходной каталог, и вы сможете ссылаться на него и загружать его оттуда

или

  • вы просто определяете путь в вашем app.config, что-то вроде DataPath, и устанавливаете его в папку, где находится файл. Затем из вашего приложения вы создаете полное имя пути для этого файла как Path.Combine(AppSettings["DataPath"], "FilterIwant.html") - при таком подходе вы становитесь полностью независимы от того, где действительно находится файл, и вам не нужно ничего перемещать. Также: это дает вам возможность позже создать утилиту администрирования/конфигурации для ваших пользователей, чтобы они могли выбрать любой каталог, и ваше приложение найдет эти файлы там.
4
ответ дан 4 December 2019 в 13:44
поделиться

Вам потребуется помощь класса System.Io.Path :

GetFullPath: возвращает абсолютный путь для указанной строки пути.

Правка :

Вам также может понадобиться каталог приложения - именно здесь ваше приложение будет установлено:

string appPath = Path.GetDirectoryName(Application.ExecutablePath);
1
ответ дан 4 December 2019 в 13:44
поделиться

Вероятно, вы хотите передать полный путь в качестве аргумента командной строки. Затем вы можете получить аргумент с помощью параметра args метода Main. Для преобразования относительного пути в абсолютный можно использовать Path.GetFullPath:

using System;
using System.IO;

public class CommandLine
{
   public static void Main(string[] args)
   {
       // The path is passed as the first argument
       string fileName = arg[0];

       // get absolute path
       fileName = Path.GetFullPath(fileName);

       // TODO: do whatever needs to done with the passed file name
   }

}

0
ответ дан 4 December 2019 в 13:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: