Jak odczytać osadzony zasób (plik tekstowy), używając go StreamReader
i zwracając jako ciąg? Mój obecny skrypt używa formularza Windows i pola tekstowego, które pozwalają użytkownikowi znaleźć i zamienić tekst w pliku tekstowym, który nie jest osadzony.
private void button1_Click(object sender, EventArgs e)
{
StringCollection strValuesToSearch = new StringCollection();
strValuesToSearch.Add("Apple");
string stringToReplace;
stringToReplace = textBox1.Text;
StreamReader FileReader = new StreamReader(@"C:\MyFile.txt");
string FileContents;
FileContents = FileReader.ReadToEnd();
FileReader.Close();
foreach (string s in strValuesToSearch)
{
if (FileContents.Contains(s))
FileContents = FileContents.Replace(s, stringToReplace);
}
StreamWriter FileWriter = new StreamWriter(@"MyFile.txt");
FileWriter.Write(FileContents);
FileWriter.Close();
}
źródło
Environment.SpecialFolder
aby uzyskać folder na pulpicie. Należy pamiętać, że zasób będzie miał przestrzeń nazw na podstawie ścieżki w projekcie, więc jego nazwa może nie być sprawiedliwafile1.txt
.GetManifestResourceStream
wymaga ścieżki, jak wskazuje @adrian. Jeśli to pomoże nikomu, że ścieżka jest jak co @SimpleCoder wystawach w przykładzie:MyNamespace.Filename.Ext
. Wcześniej próbowałem,MyNamespace.Resources.Filename.Ext
ale to kończy się na zero.using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
Możesz dodać plik jako zasób, używając dwóch osobnych metod.
Kod C # wymagany do uzyskania dostępu do pliku jest inny , w zależności od metody użytej do dodania pliku w pierwszej kolejności.
Metoda 1: Dodaj istniejący plik, ustaw właściwość na
Embedded Resource
Dodaj plik do projektu, a następnie ustaw typ na
Embedded Resource
.UWAGA: Jeśli dodasz plik za pomocą tej metody, możesz użyć go,
GetManifestResourceStream
aby uzyskać do niego dostęp (patrz odpowiedź z @dtb ).Metoda 2: Dodaj plik do
Resources.resx
Otwórz
Resources.resx
plik, użyj menu rozwijanego, aby dodać plik, ustawAccess Modifier
napublic
.UWAGA: Jeśli dodasz plik za pomocą tej metody, możesz użyć go,
Properties.Resources
aby uzyskać do niego dostęp (patrz odpowiedź z @Night Walker ).źródło
Resource
nic nie pozwala na odczytanie elementu jako zasobu? musisz użyćEmbeddedResource
lub dodać doResources.resx
pliku?Properties.Resources.Your_resource_name
napisać to:Properties.Resources.ResourceManager.GetObject("Your_resource_name")
.Zasadniczo służy
System.Reflection
do uzyskania odniesienia do bieżącego zestawu. Następnie używaszGetManifestResourceStream()
.Przykład ze strony, którą opublikowałem:
Uwaga : należy dodać,
using System.Reflection;
aby to działałoźródło
namespace
jako części nazwy zasobuvar auxList= System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
Ta metoda może być bardzo przydatna, gdy chcesz poznać dokładną nazwę zasobu. (Zaczerpnięte z pytania stackoverflow.com/questions/27757/… )W programie Visual Studio możesz bezpośrednio osadzić dostęp do zasobu pliku za pomocą karty Zasoby we właściwościach projektu (w tym przykładzie „Analytics”).
Do pliku wynikowego można następnie uzyskać dostęp jako tablicę bajtów
Jeśli potrzebujesz go jako strumienia, to (od https://stackoverflow.com/a/4736185/432976 )
źródło
Po dodaniu pliku do zasobów powinieneś wybrać jego modyfikatory dostępu jako publiczne, niż możesz zrobić coś takiego.
CLIST01 to nazwa osadzonego pliku.
W rzeczywistości możesz przejść do resources.Designer.cs i zobaczyć, jak nazywa się getter.
źródło
Action
opcjęIncorporated ressource
, nie mam żadnegoAccess Modifiers
pola w panelu właściwości. Ponadto nie mamPropersites.Resources
klasy, pojawia sięThe name 'Properties' does not exist in the current context
błąd podczas kompilowania kodu.Resources.resx
, zobacz moją odpowiedź na temat różnych metod osadzania plików w projekcie.dodanie np. Testfile.sql Menu projektu -> Właściwości -> Zasoby -> Dodaj istniejący plik
źródło
Wiem, że to stary wątek, ale to działało dla mnie:
przeczytaj tekst w ten sposób:
Tekst, który dodałem do zasobów: „SomeText.txt”
źródło
Możesz także użyć tej uproszczonej wersji odpowiedzi @ dtb:
źródło
Nauczyłem się teraz, że w twoim pliku nie może znajdować się „.” (kropka) w nazwie pliku.
Templates.plainEmailBodyTemplate-en.txt -> Działa !!!
Templates.plainEmailBodyTemplate.en.txt -> nie działa za pośrednictwem GetManifestResourceStream ()
Prawdopodobnie dlatego, że ramy są mylone w przestrzeniach nazw i nazwach plików ...
źródło
Przez wszystkie twoje połączone moce używam tej klasy pomocniczej do czytania zasobów z dowolnego zestawu i dowolnej przestrzeni nazw w sposób ogólny.
źródło
Czytam użycie pliku tekstowego zasobu osadzonego:
Próba:
źródło
Wiem, że to stare, ale chciałem tylko zwrócić uwagę na NETMF (.Net MicroFramework), możesz łatwo to zrobić:
Ponieważ NETMF nie ma
GetManifestResourceStream
źródło
Po przeczytaniu wszystkich opublikowanych tutaj rozwiązań. Oto jak to rozwiązałem:
źródło
Odpowiedź jest dość prosta, po prostu zrób to, jeśli dodałeś plik bezpośrednio z pliku resources.resx.
Za pomocą tego wiersza kodu tekst z pliku jest bezpośrednio odczytywany z pliku i umieszczany w zmiennej string.
źródło
Byłem zirytowany, że musisz zawsze dołączać przestrzeń nazw i folder do ciągu. Chciałem uprościć dostęp do zasobów osadzonych. Właśnie dlatego napisałem tę małą klasę. Zachęcamy do korzystania i ulepszania!
Stosowanie:
Klasa:
źródło
Niektóre typy projektów VS .NET nie generują automatycznie pliku .NET (.resx). Poniższe kroki dodają plik zasobów do projektu:
Resources
.Teraz możesz dodać plik tekstowy jako zasób, na przykład plik xml:
Resources
ma właściwość typustring
nazwaną na podstawie dołączonego pliku. Jeśli nazwa pliku to np. RibbonManifest.xml, właściwość powinna mieć nazwęRibbonManifest
. Dokładną nazwę znajdziesz w pliku kodu Resources.Designer.cs.string xml = Resources.RibbonManifest
. Ogólna forma toResourceFileName.IncludedTextFileName
. Nie używaj,ResourceManager.GetString
ponieważ funkcja get właściwości string już to zrobiła.źródło
źródło
Jest to klasa, która może być bardzo przydatna do odczytu osadzonych plików zasobów z bieżącego
Assembly
:źródło
Dla wszystkich osób, które po prostu chcą szybko tekstu zakodowanego pliku w winforms;
Resources.<name of resource>.toString();
aby odczytać plik.Nie poleciłbym tego jako najlepszej praktyki ani niczego, ale działa szybko i robi to, co musi zrobić.
źródło
Dla użytkowników korzystających z VB.Net
gdzie
MyApplicationName
jest przestrzeń nazw mojej aplikacji. To nie jest nazwa zestawu. Ta nazwa jest zdefiniowana we właściwościach projektu (zakładka Aplikacja).Jeśli nie znajdziesz poprawnej nazwy zasobu, możesz użyć
GetManifestResourceNames()
funkcjilub
lub
źródło
Czytaj osadzony plik TXT na zdarzeniu ładowania formularza.
Ustaw zmienne dynamicznie.
Zadzwoń do Try Catch.
Utwórz Void dla IncludeText (), Visual Studio Robi to za Ciebie. Kliknij żarówkę, aby automatycznie wygenerować kod.
Umieść następujące elementy w generowanym bloku kodu
Zasób 1
Zasób 2
Zasób 3
Jeśli chcesz wysłać zwróconą zmienną gdzie indziej, po prostu wywołaj inną funkcję i ...
Osiągnięto to dzięki metodzie łączenia wielu plików txt i odczytywania ich osadzonych danych w jednym bogatym polu tekstowym. co było moim pożądanym efektem w tej próbce kodu.
źródło