2013-08-07 39 views
9

Mükemmel çalışan eksiksiz bir proje oluşturdum. Benim sorunum kurulum projesi ile ilgilidir. Başka bir bilgisayarda kullandığımda, metin dosyası dağıtım sırasında kaynak klasörün içinde olsa bile bulunamıyor!Katıştırılmış bir metin dosyasını okuma

Programımın yazılımı başka bir bilgisayara yükledikten sonra bu metin dosyalarını bulacağından nasıl emin olabilirim!

Bu çözümü aradım ama boşuna. Lütfen bunu düzeltmeme yardım edin. Eğer tam bir kod alabiliyorsam, bunu çok mutlu edeceğim!

+2

daha fazla bilgi verin. Hangi IDE kullanıyorsunuz? Bu ne tür bir proje? Metin dosyasını kaynak klasöre nasıl dahil ettiniz? Metin dosyasında hangi oluşturma seçeneklerini belirlediniz? –

+0

C# kullanıyorum. İçinde çok fazla metin dosyası bulunan ve bu dosyaları okuduğum bir proje, bir dosyayı açıp istediğim dosyanın sadece iksirini okuduğum. Bu, bazen istediğim şeye bağlı olarak o dosyanın içindeki satırları atladığım anlamına gelir. Bu dosyaları (69 metin dosyaları) kaynak dizinine ekledim. dağıtımdan sonra, kurulumu başka bir bilgisayarda kurduğum zaman, programımı okuyabilmek istiyorum! gerçekten mücadele ediyorum! Bunun için tam bir kod istiyorum. –

+0

C# ile yazıyorsunuz, fakat hangi IDE'yi kullandığınızı bize söylüyorsunuz, (monoDevelop olmasaydı görsel stüdyo ilk oyunum olurdu), yapılarınızı nasıl yapılandıracağınızı size anlatmamıza yardımcı olur. –

cevap

2

, istediğiniz size bir EmbeddedResource olarak ayarladığınız projenizde bir dosya var eğer kastettiğin varsayarsak path daki dosyasına göre yolu takiben derleme adı olmalıdır

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

proje klasörü hiyerarşisi. Kullanılan ayırıcı karakter . periyodudur. Sen ve MyCompany.MyProject adlandırılan bir montaj varsa

Öyleyse bu projede siz TestImage.jpg içeren bir klasör var, bunun için bir Stream almak için yolunu MyCompany.MyProject.Test.Image.jpg kullanırsınız.

+0

çok teşekkürler. Bana yardımcı oldu. – Vikram

22

FIrst, metin dosyasının oluşturma eylemini "EmbeddedResource" olarak belirler. Dosya olan bu isimler bulmak için do gömülü kaynağın adını anlamaya yapamıyorsanız

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(); 
    } 
} 

ve açık olmalı: Sonra

Kodunuzdaki dosyayı okumak için

assembly.GetManifestResourceNames(); 

Bu, metin dosyasının derlemeye gömülmesini istediğiniz varsayılmaktadır. Değilse, kurulum sırasında metin dosyasını içerecek şekilde kurulum projenizi değiştirmek isteyebilirsiniz.

+0

ve bu durumda AssemblyName nedir? "AssemblyName.MyFile.txt" içinde. Metin dosyasının oluşturma eylemini "EmbeddedResource" olarak ayarlamak –

+1

anahtardır. Teşekkürler. –

+0

So @MoloraneMothusi, bu kabul edilen cevap mı? Eğer öyleyse, lütfen bunu işaretleyin. :) –

1

Bunu kendi gömülü kaynak metin dosyası okumak için bu işlevi oluşturun:

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

Bu nasıl 7 dakika önce yazılmış olanın bir kopyası değil? –

+0

yazım zaman çizelgesini bile görmedim (sanırım bunu yazdığın için söylüyordun), OP için bir metot yaratıyorum, herhangi bir metin dosyasını kaynaklara geri al, çünkü bu senin kopyasının bir kopyası değil. başkası bunu yapma arzum değil, bu bir kopya değildi. – terrybozzio

+1

Bunun için endişelenme. Kasıtlı olmadığı sürece yanlış bir şey yok. –