2013-08-07 20 views
9

Stworzyłem pełny projekt, który działa idealnie. Mój problem dotyczy projektu konfiguracji. Kiedy używam go na innym komputerze, nie można znaleźć pliku tekstowego, nawet jeśli znajduje się w folderze zasobów podczas wdrażania!Czytanie osadzonego pliku tekstowego

Jak mogę zapewnić, że mój program znajdzie te pliki tekstowe po zainstalowaniu oprogramowania na innym komputerze!

Szukałem tego rozwiązania, ale na próżno. Pomóż mi rozwiązać ten problem. Jeśli mogę uzyskać pełny kod, który to zrobi, będę bardzo szczęśliwy!

+2

Proszę podać więcej informacji. Z jakiego IDE korzystasz? Jaki to jest typ projektu? W jaki sposób uwzględniłeś plik tekstowy w folderze zasobów? Jakie opcje kompilacji zostały ustawione w pliku tekstowym? –

+0

Im przy użyciu C#. jest to projekt, który zawiera tyle plików tekstowych i sposób, w jaki czytam te pliki, polega na tym, że otwieram plik i czytam tylko miksturę tego pliku, który chcę. Oznacza to, że czasami pomijam linie wewnątrz tego pliku, w zależności od tego, co chcę. umieściłem te pliki (69 plików tekstowych) w katalogu zasobów. więc po wdrożeniu chcę, aby po zainstalowaniu instalacji na innym komputerze mój program mógł odczytać te pliki! Naprawdę walczę! Chcę mieć pełny kod. –

+0

Piszesz w języku C#, ale mówisz nam, którego IDE używasz (studio graficzne byłoby moim pierwszym zakładem, jeśli nie monoDevelop), pomoże nam powiedzieć, jak skonfigurować działania kompilacji. –

Odpowiedz

2

Zakładając, to znaczy, że masz plik w projekcie, które zostały ustawione jako EmbeddedResource, chcesz

using (var stream = Assembly.GetExecutingAssembly() 
    .GetManifestResourceStream(path)) 
{ 
    ... 
} 

gdzie path powinna być nazwa montaż następuje względnej ścieżki do pliku w hierarchia folderów projektu. Użyty znak separatora to okres ..

Więc jeśli masz zespół o nazwie MyCompany.MyProject a następnie w tym projekcie masz folder zawierający Image.jpgTest, należy użyć ścieżki MyCompany.MyProject.Test.Image.jpg dostać Stream dla niego.

+0

wielkie dzięki. Pomogło mi to. – Vikram

22

FIrst ustawia działanie kompilacji pliku tekstowego na "EmbeddedResource".

Następnie odczytać pliku w kodzie:

var assembly = Assembly.GetExecutingAssembly(); 
var resourceName = "AssemblyName.MyFile.txt"; 

using (Stream stream = assembly.GetManifestResourceStream(resourceName)) 
{ 
    using (StreamReader reader = new StreamReader(stream)) 
    { 
     string result = reader.ReadToEnd(); 
    } 
} 

Jeżeli nie możesz dowiedzieć się nazwa zasobu osadzonego to zrobić, aby znaleźć nazwiska i powinno być oczywiste, który plik jest:

assembly.GetManifestResourceNames(); 

Zakłada to, że chcesz, aby plik tekstowy został osadzony w zespole. Jeśli nie, możesz po prostu zmienić projekt instalacji, aby uwzględnić plik tekstowy podczas instalacji.

+0

i jaka jest nazwa AssemblyName w tym przypadku? wewnątrz "AssemblyName.MyFile.txt". –

+1

Ustawienie akcji kompilacji pliku tekstowego na "EmbeddedResource" jest kluczem. Dzięki. –

+0

Tak @MoloraneMothusi, czy to jest zaakceptowana odpowiedź? Jeśli tak, proszę oznaczyć go jako taki. :) –

1

utworzyć tę funkcję, aby przeczytać cokolwiek osadzony plik tekstowy zasób masz:

public string GetFromResources(string resourceName) 
{ 
    Assembly assem = this.GetType().Assembly; 

    using (Stream stream = assem.GetManifestResourceStream(resourceName)) 
    { 
     using (var reader = new StreamReader(stream)) 
     { 
      return reader.ReadToEnd(); 
     } 

    } 
} 
+0

Jak to jest nie tylko kopia tego, co zostało napisane 7 minut wcześniej? –

+0

nawet nie widziałem twojego postu Tymoteusza (jak sądzę, powiedziałeś to ze względu na twój post), tworzę metodę dla OP odzyskać dowolny plik tekstowy w zasobach, ponieważ to nie jest twoja kopia, przykro mi, jeśli cię z ciebie lub komuś innemu nie jest to moje pragnienie, żeby to zrobić, to nie była kopia. – terrybozzio

+1

Nie martw się o to. Nic złego, o ile nie było celowe. –