2013-05-22 12 views
6

Napisałem program, który czyta z plików tekstowych i może tworzyć je w celu załadowania i zapisania danych. Mam kilka plików, które są "domyślnymi" danymi, które są ładowane zaraz po uruchomieniu programu. Pliki są ładowane przez statyczne odwołanie. Mój kod działa dobrze zanim go opublikuję, ale oczywiście kiedy go opublikuję, statyczne odniesienia przestają działać. Nie wiem, jak dodać domyślne dane do kompilacji jako odrębne pliki tekstowe, aby móc nadal odwoływać się do nich po kompilacji.Jak uzyskać plik tekstowy, który ma być częścią mojej kompilacji?

Wyobrażam sobie, że jestem w stanie zbudować program i mieć jakiś folder, który towarzyszy plikowi wykonywalnemu z domyślnymi plikami danych, które mogę łatwo odnieść, ale nie wiem jak to zrobić (lub jeśli istnieje lepszy sposób).

Poniżej znajduje się początek kodu używanego do odczytu z pliku. Obecnie domyślna nazwa pliku danych jest przekazywana statycznie do sub i służy do identyfikacji pliku do odczytania, więc chciałbym mieć opublikowany plik, z którym mogę zrobić to samo.

Uwaga: próbowałem dodać pliki jako "Zasoby", ale nie mogę odwoływać się do pliku jako pliku tekstowego; Mogę tylko odzyskać masywną ścianę tekstu zawartą w dokumencie, która nie zadziała z powyższym kodem (chyba, że ​​oczywiście czegoś mi brakuje).

Jeśli można wyjaśnić:

  1. Jak mogę dodać plik do kompilacji tak, że mogę jeszcze przejść przez to zbiorowo nazwy pliku?
  2. W jaki sposób mój kod będzie odnosił się do plików (np. "My.Resources.filename"?) W ostatecznej kompilacji?
+1

Czy jest to plik tekstowy, do którego musisz uzyskać dostęp, który będzie znajdować się w tym samym drzewie katalogów, co Twoja aplikacja? Możesz dodać folder do swojego rozwiązania. Dodaj plik tekstowy do tego folderu i ustaw "Copy to Output Directory" na jedną z opcji "Copy". Skopiuje plik z projektu do katalogu na kompilacji. – tcshao

+0

Edytowałem twój tytuł. Zobacz, "[Czy w tytułach pytania powinny znaleźć się" znaczniki "?] (Http://meta.stackexchange.com/questions/19190/)", gdzie konsensus brzmi "nie, nie powinien". –

+0

W jaki sposób wdrażasz swoją aplikację? –

Odpowiedz

8

Możesz dodać plik do kompilacji jako plik zawartości lub osadzony zasób.

Dla pliku treści ustaw właściwość Utwórz plik jako "zawartość", a opcję Kopiuj na katalog wyjściowy na "Kopiuj zawsze" we właściwościach pliku. Następnie można uzyskać dostępu do pliku tak:

FileName = Application.StartupPath() = + FileName 
Dim sr As New IO.StreamReader(FileName) 
... 

Aby osadzić plik jako zasób trzeba ustawić akcji Zbuduj pliku do „Embedded Resource” i Copy to Output Directory fałszywe. Ten numer Microsoft support page zawiera instrukcje dotyczące uzyskiwania dostępu do zasobów osadzonych. Kod byłoby coś takiego:

Dim sr As StreamReader 
Dim thisAssembly As Assembly 
thisAssembly = Assembly.GetExecutingAssembly() 
sr = New StreamReader(thisAssembly.GetManifestResourceStream("NameSpace." + FileName)) 

Dim strLine As String = "" 
Do Until sr.EndOfStream 
    strLine = sr.ReadLine 
    'Code that interprets the data in the file 
    ... 

Wymień NameSpace z przestrzeni nazw aplikacji (Projekt Właściwości -> Application -> nazw root)

Trzeba też dodać Imports System.Reflection w górnej części kodu plik.

Korzystanie z zasobu osadzonego ma tę zaletę, że umożliwia zarządzanie mniejszą ilością plików i nie trzeba śledzić ścieżek.

+0

Dodałem folder, który zasugerował tcshao, a następnie przerobił twój kod, aby trochę dodać plik treści, aby moje rozwiązanie działało! Dziękuję Ci bardzo! – Paul

Powiązane problemy