Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись хэша xml-файла, проблема с потоками 
:(
    Опции темы
ДобренькийПапаша
Дата 12.9.2011, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Мне необходимо каждый раз при считывании xml-файла проверять его хэш и обновлять хэш при изменении файла.
Стал использовать FileSystemWatcher. Настроил, работает. Но проявляется следующая проблема. Иногда XDocument.Load() и XDocument.Save() не успевают закрыть свои потоки чтения, до того как сработает событие Changed класса FileSystemWatcher и тогда я получаю исключение:
Код

public void SettingsFile_OnChanged(object sender, FileSystemEventArgs e)
        {
            WriteHashToSettingsFile(CalculateHash());            
        }

        public static string CalculateHash()
        {           
            StreamReader settingsFileReader = new StreamReader(XmlSettings.DefaultXmlSettingsFilePath); //Исключение, файл занят другим процессом
            string xmlStr = settingsFileReader.ReadToEnd();

            settingsFileReader.Close();

            StringBuilder buff = new StringBuilder();
            if (!string.IsNullOrWhiteSpace(xmlStr))
            {
                int startIndex = xmlStr.IndexOf("<Parameters>");
                int endIndex = xmlStr.IndexOf("<HashCode");

                string xmlStrToHash = xmlStr.Substring(startIndex, endIndex - startIndex);

                SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
                sha1.ComputeHash(Encoding.UTF8.GetBytes(xmlStrToHash));

                byte[] hash = sha1.Hash;
                buff = new StringBuilder();
                foreach (byte hashByte in hash)
                {
                    buff.Append(String.Format("{0:X1}", hashByte));
                }
            }
            return buff.ToString();         
        }


Что можете предложить? Если хорошего способа побороть эту проблему не найдётся, то буду благодарен предложениям по другим способам ведения хеширования и сравнения контрольной суммы без использования FileSystemWatcher'а.

Это сообщение отредактировал(а) ДобренькийПапаша - 12.9.2011, 09:40


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.