Saya ingin membaca baris pertama dari file teks yang saya tambahkan ke direktori root proyek saya. Artinya, penjelajah solusi saya menampilkan file .txt di samping file .cs saya di proyek saya.
Jadi, saya mencoba melakukan:
TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();
Tetapi ini tidak berhasil karena mengacu pada Folder Bin dan file saya tidak ada di sana ... Bagaimana saya dapat membuat ini berfungsi? : /
Terima kasih
Jawaban:
Dari Solution Explorer, klik kanan pada myfile.txt dan pilih "Properties"
Dari sana, setel
Build Action
kecontent
danCopy to Output Directory
ke salah satuCopy always
atauCopy if newer
sumber
Embedded Resource
dan membaca t artikel tentang cara membaca emebedded sumber daya blogs.msdn.com/b/nikola/archive/2008/05/14/...Anda dapat menggunakan berikut ini untuk mendapatkan direktori root dari proyek situs web:
String FilePath; FilePath = Server.MapPath("/MyWebSite");
Atau Anda bisa mendapatkan direktori dasar seperti ini:
sumber
Tambahkan File Sumber Daya ke proyek Anda (Klik Kanan Proyek-> Properti-> Sumber Daya). Di mana dikatakan "string", Anda dapat beralih menjadi "file". Pilih "Tambahkan Sumber Daya" dan pilih file Anda.
Sekarang Anda dapat mereferensikan file Anda melalui
Properties.Resources
koleksi.sumber
private string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
Metode di atas akan memberi Anda sesuatu seperti ini:
"C:\Users\myuser\Documents\Visual Studio 2015\Projects\myProjectNamespace\bin\Debug"
Dari sini Anda dapat menavigasi mundur menggunakan System.IO.Directory.GetParent:
1 kali akan membawa Anda ke \ bin, 2 kali akan membawa Anda ke \ myProjectNamespace, jadi akan seperti ini:
Nah, sekarang Anda memiliki sesuatu seperti "C: \ Users \ myuser \ Documents \ Visual Studio 2015 \ Projects \ myProjectNamespace", jadi lampirkan saja jalur terakhir ke nama file Anda, misalnya:
_filePath += @"\myfile.txt"; TextReader tr = new StreamReader(_filePath);
Semoga membantu.
sumber
Anda juga dapat menyematkannya (build action set to
Resource
), berikut cara mengambilnya dari sana:private static UnmanagedMemoryStream GetResourceStream(string resName) { var assembly = Assembly.GetExecutingAssembly(); var strResources = assembly.GetName().Name + ".g.resources"; var rStream = assembly.GetManifestResourceStream(strResources); var resourceReader = new ResourceReader(rStream); var items = resourceReader.OfType<DictionaryEntry>(); var stream = items.First(x => (x.Key as string) == resName.ToLower()).Value; return (UnmanagedMemoryStream)stream; } private void Button1_Click(object sender, RoutedEventArgs e) { string resName = "Test.txt"; var file = GetResourceStream(resName); using (var reader = new StreamReader(file)) { var line = reader.ReadLine(); MessageBox.Show(line); } }
(Beberapa kode diambil dari jawaban ini oleh Charles )
sumber
Anda harus menggunakan jalur absolut dalam kasus ini. Tetapi jika Anda menyetelnya
CopyToOutputDirectory = CopyAlways
, ini akan berfungsi seperti yang Anda lakukan.sumber
Dalam kode ini Anda mengakses ke
root
proyek direktori:string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
kemudian:
StreamReader r = new StreamReader(_filePath + "/cities2.json"))
sumber