# .NET- ja suljetut asiakirjat

<datetime class="hidden">2004-02-20T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported, .NET, C# -->
OK, voiko kukaan selittää, miksi voinM SK1t tarkastaa nimenomaisesti, voinko lukkoa asiakirjan ennen kuin luen sen . [FileSystemWatcher](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemiofilesystemwatcherclasstopic.asp) odottamaan, että asiakirjat laaditaan luetteloon ennen kuin se käynnistetään. - on hyvä, mutta ei ole mitään helppoa tarkistaa, onko asiakirja readable before starting to read. [FileStream](http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemIOFileStreamClassTopic.asp) ja kiinnittää virhettä, joka se heittelee, kun asiakirja on suljettu toisella prosessilla...kuten niin... mutta tämä ei todellakaan tunnu asianmukaiselta 'Ihmettelen ajatusta poikkeusten käyttämisestä M SK4joiden käyttö on myös todella hidastaMSC5 tällaisen tehtävän osaltaMST6miksi eiMstK7t FileStreamM stk8Kyllätkö lukea lukkien tarkastelua ennen kuin asiakirjan avaamistaMStk9

```
        private static int m_ReadAttempts = 0;
        private string  ReadFileFromDisk(string filePath)
        {
            try
            {
                if(!File.Exists(filePath))
                {
                    MessageBox.Show("Sorry, but the file specified " + Environment.NewLine + filePath + Environment.NewLine + "Cannot be found");
                    return string.Empty;
                }
            using(FileStream fs = new FileStream(filePath,FileMode.Open,FileAccess.Read,FileShare.Read))
                {
                        using(StreamReader sr = new StreamReader(fs)) 
                        {
                            string tmpStr = sr.ReadToEnd();
                            sr.Close();
                            m_ReadAttempts =0;
                            return tmpStr;
                        }
                
                }        
            }
            catch(IOException ex)
            {
                    if(m_ReadAttempts < 10)
                {
                    Thread.Sleep(500);
                    m_ReadAttempts++;
                    return ReadFileFromDisk(filePath);
                }
                else
                {
                    throw ex;
                }
            }
        }
```