Bagaimana cara membaca sumber daya yang disematkan (file teks) menggunakan StreamReader
dan mengembalikannya sebagai string? Skrip saya saat ini menggunakan formulir Windows dan kotak teks yang memungkinkan pengguna menemukan dan mengganti teks dalam file teks yang tidak disematkan.
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();
}
sumber
Environment.SpecialFolder
untuk mendapatkan folder desktop. Anda harus ingat bahwa sumber daya akan diberi nama berdasarkan jalurnya dalam proyek, sehingga namanya mungkin tidak adilfile1.txt
.GetManifestResourceStream
membutuhkan path seperti yang ditunjukkan oleh @adrian. Jika membantu siapa pun, jalan itu seperti menunjukkan apa yang @SimpleCoder dalam contoh:MyNamespace.Filename.Ext
. Saya sebelumnya sudah mencobaMyNamespace.Resources.Filename.Ext
tetapi hasilnya nol.using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
Anda dapat menambahkan file sebagai sumber daya menggunakan dua metode terpisah.
Kode C # yang diperlukan untuk mengakses file berbeda , tergantung pada metode yang digunakan untuk menambahkan file di tempat pertama.
Metode 1: Tambahkan file yang ada, atur properti ke
Embedded Resource
Tambahkan file ke proyek Anda, lalu setel jenisnya ke
Embedded Resource
.CATATAN: Jika Anda menambahkan file menggunakan metode ini, Anda dapat menggunakannya
GetManifestResourceStream
untuk mengaksesnya (lihat jawaban dari @dtb ).Metode 2: Tambahkan file ke
Resources.resx
Buka
Resources.resx
file, gunakan kotak dropdown untuk menambahkan file, aturAccess Modifier
kepublic
.CATATAN: Jika Anda menambahkan file menggunakan metode ini, Anda dapat menggunakannya
Properties.Resources
untuk mengaksesnya (lihat jawaban dari @Night Walker ).sumber
Resource
tidak melakukan apa pun yang memungkinkan Anda membaca item sebagai sumber daya? Anda harus menggunakanEmbeddedResource
atau menambahResources.resx
file?Properties.Resources.Your_resource_name
menulis ini:Properties.Resources.ResourceManager.GetObject("Your_resource_name")
.Pada dasarnya, Anda menggunakan
System.Reflection
untuk mendapatkan referensi ke Majelis saat ini. Lalu, Anda gunakanGetManifestResourceStream()
.Contoh, dari halaman yang saya posting:
Catatan : perlu ditambahkan
using System.Reflection;
agar ini berfungsisumber
namespace
sebagai bagian dari nama sumber dayavar auxList= System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
Metode ini bisa sangat berguna ketika Anda ingin mempelajari nama sumber daya yang tepat. (Diambil dari pertanyaan stackoverflow.com/questions/27757/… )Di Visual Studio Anda dapat langsung menyematkan akses ke sumber daya file melalui tab Resources di properti Project ("Analytics" dalam contoh ini).
File yang dihasilkan kemudian dapat diakses sebagai array byte dengan
Jika Anda memerlukannya sebagai streaming, maka (dari https://stackoverflow.com/a/4736185/432976 )
sumber
Saat Anda menambahkan file ke sumber daya, Anda harus memilih Access Modifiers sebagai publik daripada yang bisa Anda buat seperti mengikuti.
CLIST01 adalah nama file yang disematkan.
Sebenarnya Anda bisa pergi ke resources.designer.cs dan lihat apa nama pembuatnya.
sumber
Action
keIncorporated ressource
, saya tidak memilikiAccess Modifiers
bidang di panel properti. Juga, saya tidak memilikiPropersites.Resources
kelas, saya mendapatkanThe name 'Properties' does not exist in the current context
kesalahan saat mengkompilasi kode Anda.Resources.resx
, lihat jawaban saya pada metode yang berbeda untuk menanamkan file ke dalam proyek.menambahkan mis. Projectfile.sql Menu Project -> Properties -> Resources -> Add Existing file
sumber
Saya tahu ini adalah utas lama, tetapi ini yang berhasil bagi saya:
baca teks seperti ini:
Teks yang saya tambahkan ke sumber: 'SomeText.txt'
sumber
Anda juga dapat menggunakan versi sederhana jawaban @ dtb ini:
sumber
Sesuatu yang saya pelajari sekarang adalah bahwa file Anda tidak diizinkan memiliki "." (titik) dalam nama file.
Templates.plainEmailBodyTemplate-en.txt -> Works !!!
Templates.plainEmailBodyTemplate.en.txt -> tidak berfungsi melalui GetManifestResourceStream ()
Mungkin karena kerangka kerja menjadi bingung atas ruang nama vs nama file ...
sumber
Dengan semua kekuatan Anda digabungkan, saya menggunakan kelas penolong ini untuk membaca sumber daya dari setiap majelis dan ruang nama dengan cara yang umum.
sumber
Saya membaca penggunaan file teks sumber daya tertanam:
Sampel:
sumber
Saya tahu ini sudah tua, tetapi saya hanya ingin menunjukkan untuk NETMF (.Net MicroFramework), Anda dapat dengan mudah melakukan ini:
Karena NETMF tidak punya
GetManifestResourceStream
sumber
Setelah membaca semua solusi yang diposting di sini. Inilah cara saya menyelesaikannya:
sumber
Jawabannya cukup sederhana, cukup lakukan ini jika Anda menambahkan file langsung dari resources.resx.
Dengan baris kode itu, teks dari file langsung dibaca dari file dan dimasukkan ke dalam variabel string.
sumber
Saya kesal karena Anda harus selalu menyertakan namespace dan folder dalam string. Saya ingin menyederhanakan akses ke sumber daya yang tertanam. Inilah sebabnya saya menulis kelas kecil ini. Jangan ragu untuk menggunakan dan meningkatkan!
Pemakaian:
Kelas:
sumber
Beberapa jenis proyek VS .NET tidak menghasilkan file .NET (.resx) secara otomatis. Langkah-langkah berikut menambahkan file Resource ke proyek Anda:
Resources
.Sekarang Anda dapat menambahkan file teks sebagai sumber daya, misalnya file xml:
Resources
memiliki properti tipestring
yang dinamai setelah file yang disertakan. Jika nama file mis. RibbonManifest.xml, maka properti tersebut harus memiliki namaRibbonManifest
. Anda menemukan nama persis di file kode Resources.Designer.cs.string xml = Resources.RibbonManifest
. Bentuk umumnya adalahResourceFileName.IncludedTextFileName
. Jangan gunakanResourceManager.GetString
karena fungsi get dari properti string sudah melakukannya.sumber
sumber
Ini adalah kelas yang menurut Anda sangat nyaman untuk membaca file sumber daya tertanam dari saat ini
Assembly
:sumber
Untuk semua orang yang hanya ingin teks file hardcoded dalam winforms;
Resources.<name of resource>.toString();
membaca file.Saya tidak akan merekomendasikan ini sebagai praktik terbaik atau apa pun, tetapi ini bekerja dengan cepat dan melakukan apa yang perlu dilakukan.
sumber
Untuk pengguna yang menggunakan VB.Net
di mana
MyApplicationName
namespace dari aplikasi saya. Itu bukan nama majelis. Nama ini didefinisikan dalam properti proyek (tab Aplikasi).Jika Anda tidak menemukan nama sumber daya yang benar, Anda dapat menggunakan
GetManifestResourceNames()
fungsiatau
atau
sumber
Baca Embedded TXT FILE pada Acara Muat Formulir.
Atur Variabel Secara Dinamis.
Sebut Try Try.
Buat Void untuk IncludeText (), Visual Studio Melakukan ini untuk Anda. Klik Bola Lampu untuk Secara Otomatis Menghasilkan CodeBlock.
Masukkan yang berikut ini di dalam Blok Kode yang Dihasilkan
Sumber daya 1
Sumber daya 2
Sumber daya 3
Jika Anda ingin mengirim variabel yang dikembalikan ke tempat lain, panggil saja fungsi lain dan ...
Apa yang dicapai ini adalah ini, metode untuk menggabungkan beberapa file txt, dan membaca data yang disematkan, di dalam satu kotak teks kaya. yang merupakan efek yang saya inginkan dengan contoh kode ini.
sumber