private SiteInfo LoadSiteInfoFromFile(string domain)
        {
            if (!SiteInfo.IsValidDomain(domain))
            {
                return(null);
            }

            string fileName = GetFullSiteInfoFileName(domain);

            if (!File.Exists(fileName))
            {
                return(null);
            }

            int retryCount = 3;

            do
            {
                try
                {
                    using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
                    {
                        using (var reader = new StreamReader(stream))
                        {
                            string st = reader.ReadToEnd();
                            return(SiteInfo.DeserializeFromJson(st));
                        }
                    }
                }
                catch (IOException)
                {
                    retryCount--;

                    if (retryCount == 0)
                    {
                        return(null);
                    }

                    Thread.Sleep(2);
                }
                catch
                {
                    return(null);
                }
            }while (retryCount > 0);

            return(null);
        }