Скажите, что у меня есть эта файловая структура
Soultion-> Folder1-> FileIwant.html
Таким образом, это могло быть чем-то как C:\Soultion\Folder1\FilterIwant.html
Теперь я должен считать этот файл в свое приложение. Я не могу просто hardcode он с тех пор, когда я даю его кому-то еще, кого они могли бы поместить его на F: диск или что-то.
Или когда я создаю msi файл, путь мог бы полностью отличаться. Таким образом, как, как я могу сказать, возможно, берут
"Folder1\FilterIwant.html"
и используйте это для получения пути к папке независимо от того, куда они помещают его?
Править
Я попробовал Путь. GetFullPath, но я кончаюсь в мусорном ведре/каталоге отладки. Но мой файл не находится в том каталоге. Я думаю, что это - пара каталогов прежде. Также, если я сделаю msi файл, то у меня будет мусорное ведро/каталог отладки?
Почему файл, который используется как часть вашего приложения, находится не в той же папке, что и приложение? Мне кажется, что вы должны установить свойства этого файла для копирования в выходную папку, когда вы выполняете сборку.
Это позволит убедиться, что ваш файл находится в папке bin \ debug.
РЕДАКТИРОВАТЬ: либо это, либо вы должны поместить свои файлы в одну из специальных папок, на ум приходят данные приложения или мои документы .
Edit
Путь bin / Debug не будет присутствовать при запуске установленного приложения (если вы специально не укажете установщику использовать этот подкаталог, конечно).
Когда Visual Studio компилирует ваш проект, она будет помещать вывод в каталог bin\debug
. Любые файлы содержимого, на которые вы хотите сослаться, также должны быть скопированы в эти директории, чтобы ваше приложение, расположенное в этой директории, смогло прочитать файл.
У вас есть два варианта:
Copy to Output Directory
в FilterIwant. html
в Copy if newer
; в этом случае, если файл изменился, он будет скопирован в выходной каталог, и вы сможете ссылаться на него и загружать его оттудаили
app.config
, что-то вроде DataPath
, и устанавливаете его в папку, где находится файл. Затем из вашего приложения вы создаете полное имя пути для этого файла как Path.Combine(AppSettings["DataPath"], "FilterIwant.html")
- при таком подходе вы становитесь полностью независимы от того, где действительно находится файл, и вам не нужно ничего перемещать. Также: это дает вам возможность позже создать утилиту администрирования/конфигурации для ваших пользователей, чтобы они могли выбрать любой каталог, и ваше приложение найдет эти файлы там. Вам потребуется помощь класса System.Io.Path :
GetFullPath: возвращает абсолютный путь для указанной строки пути.
Правка :
Вам также может понадобиться каталог приложения - именно здесь ваше приложение будет установлено:
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
Вероятно, вы хотите передать полный путь в качестве аргумента командной строки. Затем вы можете получить аргумент с помощью параметра 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
}
}