windows - Når iterating via en FileSystemInfo [[]] crash min C # program uden en undtagelse

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en applikation, der afstemmer en mappe til nyligt tilføjede filer og behandler nye. Det er en C # (. NET 4) app, der kører på Windows 7, og mappen er faktisk en netværksdeling.


Problemet er, mens iterating thorugh filerne for at kontrollere, at de eksisterer, går appen til tider uden at kaste en undtagelse. (Jeg bruger try-catch, og der er ingen ustyret kode eller delegeret kode eller noget unormalt. Det er en simpel app)


Den itereringskode ser sådan ud:


System.IO.DirectoryInfo dp = new System.IO.DirectoryInfo(destinationPath);
System.IO.FileSystemInfo[] destinationFiles = dp.GetFileSystemInfos();

foreach (FileSystemInfo fileSysInfo in destinationFiles)
{
  string filePath = fileSysInfo.FullName;
  if (filePath.EndsWith(FILE\_VALID\_EXT) && !Directory.Exists(filePath) && !File.Exists(filePath + FILE\_PROCESSED\_EXT))
  {
    // Do processing. It doesn't reach this point! I know because I have a logging statement.
  }
}


Er koden fejl, fordi fjernkataloget (midlertidigt) ikke er tilgængelig? Eller fordi der er en slags lås på en fil eller mappen?


Hvordan kan jeg undgå dette? Måske er der en sikrere måde at bruge C # File I/O API.


Nogle tips er værdsat!

Bedste reference


Generelt når en .net-applikation går i stykker uden varsel, skyldes en stabeloverløb. Bare en ide: Kontroller, om den katalogstruktur, du opregner, har et symbolsk link, der forårsager en uendelig sløjfe.