2016-04-12 19 views
1

C# içinde bir proje üzerinde çalışıyorum ve diğer faaliyetler için işlenmeden önce kullanılan bir metin dosyasının son satırını okuyabilmesi gerekiyor İşte benim kod örneğidir.File.Open kendisi tarafından iyi çalışıyor ve ReadLines (yol) .Last() yapar. Birlikte çalışmazlar. C# için yeni ve verilen herhangi bir yardım için teşekkür ederiz. Eğer dizinin uzunluğunu bildiği gibiFile.Open kullanarak (parametreler ve File.Read (yol) .Last()

string g = "C:\\zebra\\file.txt"; 

File.Open (g, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);          

string file_name = File.ReadLines(g).Last();// error of being unable to access file because it's in use 

      Thread.Sleep(50); 

      Name.Text = file_name.Substring(13); 
      ID.Text = file_name.Substring(8, 5); 
+2

Eğer "ReadLines" i kullanacaksanız, 'File.Open' kullanmak istiyorsanız,' ReadLines' kullanmayın, 'File.Open' gerekmez. – crashmstr

+0

Teşekkürler ama File.Open kullandım çünkü dosya periyodik olarak projemle bağlantılı başka bir uygulama tarafından yazılıyor. Her ne kadar not defteri sinek üzerinde açılabilse de, onu diğer programla birlikte kullanabilmem için kullandım. – jackie

cevap

1

sen dosyanın hatlarının bir dizi döndürür File.ReadAllLines yöntemini kullanabilir. Bu son hat almak için kullanılabilir

string[] lines = File.ReadAllLines(g); 
string file_name = lines[lines.GetUpperBound(0)]; 

File.Open kullanımının gerekmediğinden, yöntem her şeyden önce dosyayı açar, okur ve kapatır. Dosya bellekte tutulması kadar küçük ise Bu yalnızca çalışacaktır

+0

Cevabınız için teşekkür ederiz. Benim dosyam, diğer programın yazdığı gibi azami 5kb'ye ulaşan sadece birkaç kb'dir. File.open'i kullanmamın sebebi buydu, çünkü diğer programın periyodik olarak da yazdığı gibi düzenli olarak içeriğini okumam gerekiyordu. Bunu başarabileceğim bir şey var mı? – jackie

+0

Bu, bunun için iyi olacaktır çünkü dosya okunduktan hemen sonra kapatılacak ve yine de dosyanın içeriğini bu dizide saklayacaktır –

+0

Yanıt için teşekkürler. Kodun kullanılmasındaki tek sorun, metin dosyasını hala File.Open ekli olmadan diğer çalışan uygulama tarafından kullanılmakta olarak görmesidir. – jackie

2

konu iki aramaların her olmasıdır - File.Open ve File.ReadLines - "kaputun altındaki" kendi dosya sistem kaynaklarını kullanır ve Aynı dosyada File.Readlines'u aramadan önce açık dosya bağlantısını düzgün bir şekilde imha etmiyorsunuz.

Benim önerim, File.Open çağrıdan tamamen kurtulmak içindir, buna gerek yoktur (bunu, bize göstermediğiniz bir şekilde kullanmıyorsanız). File.Readlines tek kullanımlık örüntüyü tamamlar ve sizin için her şeyi, yani açık dosya akışını temizlemenizi sağlar.

Eğer olan Bize olmadığını göstermiştir bir şekilde File.Open tarafından oluşturulan dosya akışı kullanarak, o zaman böyle bir using deyimi kullanın:

using (FileStream file = File.Open(g, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
{ 
    // do your stuff here with your `file` object. 
} 

// Now do your subsequent/unrelated operations on the file: 

string file_name = File.ReadLines(g).Last(); 

temizlik ilgilenir O senin Bir istisna meydana gelse bile kaynaklar.

+0

Teşekkürler. Benim soruma daha önce koydum kodu. Ben göstermedim ile ilgili herhangi bir şey yok. Hepsini önerdiğin kullanım deyimini kullanmayı denedim ve şimdi projenin hata ayıklama klasöründe bir System.IO bulamadığı bir istisna atar. – jackie

İlgili konular