2013-11-24 28 views
5

önlemek için:EnumerateFiles tüm * dizinde .md almak için <code>EnumerateFiles</code> kullanıyorum önbelleğe

foreach (var mdName in Directory.EnumerateFiles(Path.Combine(BaseDirectory, 
          "assets/markdowns"), "*.md", SearchOption.AllDirectories)) 
{ 
    // async md parser call goes here 
} 

Üç deney dosyaları a.md, b.md ve c.md var.

a1.md için a.md için yeniden adlandırdığımda, EnumerateFiles hem eski hem de yeni bir dosya adı döndürür. PowerShell sonucu 3 dosyam olduğunu söylerken EnumerateFiles 4 dosya döndürür.

Bir yerde okuduğum EnumerateFiles, tembel yükleme ile bir çeşit önbellekleme yapar mı? Dosya yeniden adlandırıldığında önbelleğini geçersiz kılmamalıdır değil mi?

GetFiles/EnumerateFiles Çıkışı:

[0]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\a.md" 
[1]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\b.md" 
[2]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\c.md" 
[3]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\_a.md" 
[4]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\_a1.md" 
[5]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\_a2.md" 
[6]: "C:\\Repos\\KiddiesBlog\\Tests\\bin\\Debug\\assets/less\\_a3.md" 
+0

Dosyayı tam olarak ne zaman yeniden adlandırıyorsunuz? Forach döngüsü çalışırken veya 2 çağrı arasında mı? –

+0

@DarinDimitrov, birim sınavında farklı şeyler deniyordum. Testler başarısız oldu. Bu yüzden tüm test senaryolarını çıkardım ve el ile her şeyi yaptım. Ben foreach öncesi yeniden adlandırıyordum. El ile yeniden adlandırmayı denedim, testleri yeniden derleyin ve yeniden çalıştırın. Şimdi 7 dosya gösteriliyor .. Dosya gezgini ve PowerShell 3 dosyaları göster. Msdn'den – Annie

+1

, önbelleğe alma olmadığını söylüyor Döndürülen koleksiyon önbelleğe alınmadı; Koleksiyondaki GetEnumerator'a yapılan her çağrı yeni bir numaralandırma başlatır. Bunun yerine "GetFiles" kullanırsanız ne olur? –

cevap

1

benim hatam olduğu ortaya çıktı. Hata ayıklama dizinindeki gerçek varlıkların gölge kopyasını oluşturmaktan sorumlu bir MSBuild görevi vardır. Önceki tüm dosyaları var. VS, temiz çözümdeki klasörü temizlemiyor. Kaynak dizinindeki değişiklikleri gözlemlemek için bu görevi değiştirmem gerekiyor sanırım.

İlgili konular