2010-07-09 14 views
6

Say mam tej struktury plikówJak uzyskać ścieżkę z katalogu w aplikacji konsoli C#?

Soultion-> Folder1 -> FileIwant.html

Więc to może być coś jak C: \ Soultion \ Folder1 \ FilterIwant.html

Teraz muszę przeczytać ten plik do mojej aplikacji. Nie mogę po prostu zakodować kodu, ponieważ kiedy daję go komuś innemu, może umieścić go na F: drive lub coś podobnego.

Lub po utworzeniu pliku msi ścieżka może być zupełnie inna. Więc jak mogę powiedzieć, może wziąć

„folder1 \ FilterIwant.html”

i używać, aby uzyskać ścieżkę folderu, niezależnie od tego, gdzie go umieścić?

Edit

Próbowałem Path.GetFullPath ale wylądować w katalogu bin/debugowania. Ale mój plik nie znajduje się w tym katalogu. Myślę, że to kilka wcześniejszych katalogów. Również jeśli zrobię plik msi, czy będę miał katalog bin/debug?

Odpowiedz

6

Dlaczego jest plikiem, który jest stosowany jako część aplikacji nie w tym samym folderze co aplikacja? Wydaje mi się, że powinieneś ustawić właściwości tego pliku, aby skopiować go do folderu wyjściowego podczas kompilacji.

To spowoduje, że plik jest w folderze bin \ debug.

EDIT: albo to, albo powinno być umieszczanie plików w jednym z folderów specjalnych, dane aplikacji lub moje dokumenty wiosny do umysłu.

+0

No ja po prostu lubię mieć swoje rzeczy w folderze nie latają do kosza gdzieś. – chobo2

+0

że jest w porządku, a istnieją ważne powody, które. szczególnie w zamkniętym środowisku. więc sugerowałbym, żebyś dał swoje pliki do domu w folderze AppData. –

1

Path.GetFullPath

Edit

bin/Debug ścieżka nie będzie obecny podczas uruchomić zainstalowaną aplikację (chyba że wyraźnie powiedzieć instalatora użyć tego podkatalogu, oczywiście).

+0

Tried to. Ścieżka kończy się w bin/debug, więc nie jestem pewien, co robić. – chobo2

+0

Zaktualizowana odpowiedź na zaktualizowane pytanie. –

1

Potrzebujesz pomocy System.Io.Path zajęć:

GetFullPath: Zwraca bezwzględną ścieżkę do określonego ciągu ścieżki.

Edit:

Możesz również potrzebować katalogu aplikacji - to jest, gdy aplikacja zostanie zainstalowana:

string appPath = Path.GetDirectoryName(Application.ExecutablePath); 
0

Prawdopodobnie chcesz przekazać pełną ścieżkę w wierszu poleceń argument. Następnie można uzyskać argument za pomocą parametru args z metody . Aby przekonwertować ścieżkę względną do absolutnego jednego można wykorzystać 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 
    } 

}

4

Kiedy Visual Studio kompiluje projekt, będzie oddanie wyjście do katalogu bin\debug. Wszelkie pliki treści, które chcesz odwołać również musi zostać skopiowany do tych miejsc, w celu aplikacji znajdującej się w tym katalogu, aby być w stanie odczytać tego pliku.

Masz dwie możliwości:

  • albo ustawić właściwość Copy to Output Directory na swój FilterIwant.html do Copy if newer; W tym przypadku, jeśli plik został zmieniony, zostanie on skopiowany do katalogu wyjściowego, i powinieneś być w stanie odwołać go i załadować go tam

lub

  • po prostu zdefiniować ścieżkę Twój app.config, coś DataPath i ustawić go do folderu, w którym znajduje się plik. Z aplikacji utworzymy pełną nazwę ścieżki dla tego pliku jako Path.Combine(AppSettings["DataPath"], "FilterIwant.html") - dzięki temu podejściu stajesz się całkowicie niezależny od tego, gdzie naprawdę jest plik i nie musisz niczego przenosić. Ponadto: daje ci to możliwość późniejszego utworzenia narzędzia admin/config dla twoich użytkowników, aby mogli wybrać dowolny katalog, który im się podoba, a twoja aplikacja znajdzie tam te pliki.
+0

Przy drugiej metodzie trzeba ją ustawić w prawidłową ścieżkę za każdym razem, gdy zostanie wdrożona poprawnie? – chobo2

+0

@ chobo2: musisz ustawić go raz dla każdej instalacji, tak. Ale posiadanie wpisu konfiguracyjnego daje również możliwość zezwolenia użytkownikowi końcowemu na samodzielną zmianę, np. narzędzie konfiguracyjne. Jeśli przytwierdzasz zachowanie do kodu, nie masz takiej możliwości –

2

W mojej aplikacji konsolowej zacząłem od katalogu debugowania, aż znalazłem najbliższy folder nadrzędny, który chciałem.

 static void Main(string[] args) 
     { 
      Console.WriteLine("Start"); 
      var debugDir = Environment.CurrentDirectory; 
      DirectoryInfo di = new DirectoryInfo(debugDir);    
      var searchDir = ""; 
      while (!di.FullName.ToLower().EndsWith("Folder1")) 
      { 
       if(di.FullName.ToLower().EndsWith(":")) //if you went too far up as in "D:" then 
        break; 
       di = di.Parent; 
      } 

      Console.WriteLine(di.FullName); 
} 
Powiązane problemy