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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зависание при чтении файла 
:(
    Опции темы
fire64
Дата 28.7.2013, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 18.7.2007

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



Всегда писал на C++ но сейчас вынужден работать с исходниками готового софта на C#
Столкнулся со страным поведеннием кода:

Код

    public string Get(string FilePath)
    {
        Crc32 crc32 = new Crc32();
        String hash = String.Empty;

        using (FileStream fs = File.Open(FilePath, FileMode.Open))
            foreach (byte b in crc32.ComputeHash(fs)) hash += b.ToString("x2").ToLower();

         return hash;
    }


При попытке чтения некоторых файлов, через  File.Open проихсодит зависание.

Если же использовать, не File.Open, а FileStream, то все ок.

Код

    public string Get(string FilePath)
    {
        Crc32 crc32 = new Crc32();
        String hash = String.Empty;

        FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read);
            foreach (byte b in crc32.ComputeHash(fs)) hash += b.ToString("x2").ToLower();

        return hash;
    }



При этом файл реально существует.

Это сообщение отредактировал(а) fire64 - 28.7.2013, 19:43
PM MAIL   Вверх
fire64
Дата 28.7.2013, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 18.7.2007

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



гм, разобрался.
Оказалось, что если файл только для чтения, то File.Open без явного указания возмоных типов операций, приводит к зависанию.
PM MAIL   Вверх
gambit
Дата 29.7.2013, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Код

public string Get(string FilePath)
    {
        Crc32 crc32 = new Crc32();
        String hash = String.Empty;

        FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read);
            foreach (byte b in crc32.ComputeHash(fs)) hash += b.ToString("x2").ToLower();

        return hash;
    }


поток необходимо закрыть или завернуть в using.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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