2009-09-07 14 views
29

Bazı csv'leri kapmak için File.ReadAllText kullanıyorum, ancak dosyayı Excel'de kapatmayı her unutduğumda, uygulama bir istisna atar çünkü uygulama dosyaya erişim.Başka bir uygulama tarafından kilitlenmiş metin dosyasını okumak için en kolay yolu

(ı ReadAllText READ oldukça net görünüyor demek, bana deli görünüyor)

Ben File.Open tüm çan ve ıslık ile orada, ama kötü kokan bir 'ara' yöntemi olduğunu biliyoruz Tamponlar ve char dizileriyle uğraşmaktan mı bahsediyorsunuz?

Evet, 'sen kullanılmakta olan bir dosyayı açmak amacıyla dosya paylaşım bayraklarını belirtmek isterseniz sadece size, bana birinci cevabı :)

cevap

45

Ben yalnızca takip istediğiniz düşünüyorum:

using (var fileStream = new FileStream("foo.bar", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (var textReader = new StreamReader(fileStream)) 
{ 
    var content = textReader.ReadToEnd(); 
} 

FileAccess.Read parametre yalnızca dosyayı okumak istediğinizi belirtmek için, önemli olan da budur. Tabii ki, bunu yapmak için, dosya Excel tarafından read-share modunda açılmış olmalıdır (bkz. .NET'de FileShare enum). Test etmedim, bu yüzden Excel'in bunu yapacağı konusunda garanti veremem.

+0

Teşekkürler, tüm dizeyi dosyadan çıkarmak için {} arasında en kısa şey ne olabilir? (Ben tembel olduğumu söyledim) – Benjol

+0

@Benjol: Sorun değil. Tüm metni okumak için kod ile güncellendi. – Noldorin

+0

@Noldorin, teşekkürler. Bu eksik bağlantıydı. FileStream'de mevcut olan tüm yöntemlere baktım, anlayamadım. – Benjol

0

vermek, tembelim, beni yarı yolda oy File.Open() ile sıkışmış.

+1

Bu dosyayı açan Excel, bu nedenle OP bunu denetleyemez. Yalnızca, Excel'in bunu paylaşma modunda açmasını ve salt okunur olarak açmasını umuyor. – Noldorin

İlgili konular