.NET ja lukitut tiedostot... (Suomi (Finnish))

.NET ja lukitut tiedostot...

Friday, 20 February 2004

//

Less than a minute

OK, voiko kukaan selittää, miksi en voi tarkasti tarkistaa, pystynkö lukitsemaan tiedoston ennen kuin luen sen (toisin sanoen, tarkista, että kukaan muu ei lukitse tiedostoa ennen kuin yritän lukea sitä). Käytän upeaa TiedostoSystemWatcher Odotetaan, että tiedostot luodaan hakemistoon ennen työn käynnistämistä - hyvä, mutta ei näytä olevan helppoa tapaa tarkistaa, että tiedosto on "luettava" ennen kuin alkaa lukea... Juuri nyt tapani tehdä tämä tehtävä on yrittää lukea - ja sijoittaa Read-lukko - tiedostoon käyttäen TiedostoStream Ja huomaan virheen, jonka se heittää, kun tiedosto on lukittuna toisella prosessilla...kuten näin...mutta tämä ei todellakaan tunnu oikealta. En pidä ajatuksesta käyttää poikkeuksia (jotka ovat myös todella hitaita) tämänkaltaiseen tehtävään...miksi FileStream ei voi lukea lukkoja ennen tiedoston avaamista???

        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;
                }
            }
        }
Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.