Back to ".NET en vergrendelde bestanden..."

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

.NET C# Imported mostlylucidcouk

.NET en vergrendelde bestanden...

Friday, 20 February 2004

OK, kan iemand uitleggen waarom ik niet expliciet kan controleren of ik een bestand kan vergrendelen voordat ik het lees (dat wil zeggen, controleer of niemand anders het bestand vergrendelt voordat ik het probeer te lezen). BestandssysteemWatcher om te wachten op bestanden die worden gemaakt in een directory voordat het activeren van een taak - prima, maar er lijkt geen gemakkelijke manier om te controleren is een bestand is 'leesbaar' voordat u begint te lezen... Op dit moment mijn manier om deze taak te doen is om te proberen te lezen - en plaats een Leesslot - op het bestand met behulp van de FileStream en vangen van de fout die het gooit wanneer het bestand is vergrendeld door een ander proces...zoals zo...maar dit voelt echt niet goed. Ik balsem op het idee van het gebruik van uitzonderingen (die zijn ook echt traag) voor dit soort taak ...waarom niet FileStream.CanRead check voor sloten VOORdat het openen van het bestand??

        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;
                }
            }
        }
logo

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