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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BinaryWriter 
:(
    Опции темы
Riddik
Дата 24.3.2012, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Привет!

Пишу в файл в двоичном формате, как правильно закрывать:

Код

FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs);        

bw.Write(data1);
bw.Write(data2);

bw.Close();
//или
fs.Close();

PM MAIL   Вверх
Cheloveck
Дата 24.3.2012, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



Код

using(FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
using(BinaryWriter bw = new BinaryWriter(fs)) {
    bw.Write(data1);
    bw.Write(data2);
}

Так

Это сообщение отредактировал(а) Cheloveck - 24.3.2012, 22:00


--------------------
user posted image
PM Jabber   Вверх
Riddik
Дата 25.3.2012, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Закроются сами в деструкторах или как? 

Я на C# гость непостоянный:)

Спасибо.
PM MAIL   Вверх
Cheloveck
Дата 25.3.2012, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



Закроются при вызове метода Dispose, который автоматом вызывается при выходе из using


--------------------
user posted image
PM Jabber   Вверх
VirusUZ
  Дата 3.4.2012, 11:05 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 9.4.2010
Где: Узбекистан, Навои й обл.

Репутация: -1
Всего: -2



Код

using System;
using System.IO;
namespace conf.App_Code.Utils {
    [Serializable]
    public class Binary : MarshalByRefObject, IBinary {
        public byte[] ReadFile(string filePath) {
            try {
                string temp =  filePath;
                return File.ReadAllBytes(temp);
            } catch { return null; }
        }
        public void Write(string filePath, byte[] b) {
            string cp = filePath;
            new FileInfo(cp).Directory.Create();
            try {
                File.WriteAllBytes(cp, b);
            } catch {
                File.Delete(cp);
                File.WriteAllBytes(cp, b);
            }
        }
        public byte[] ReadSuper(string filePath) {
            try {
                return File.ReadAllBytes(filePath);
            } catch { return null; }
        }
        public FileStream StreamSuper(string path) {
            return new FileStream(path, FileMode.Open);
        }
        public string ReadText(string path) {
            return File.ReadAllText(path);
        }
        public void CreateFolder(string path) {
            Directory.CreateDirectory(path);
        }
        public string GetDirectory(string path) {
            return Directory.GetParent(path).FullName;
        }
    }
}


Это сообщение отредактировал(а) VirusUZ - 3.4.2012, 11:05
--------------------
Virus
PM MAIL   Вверх
jonie
Дата 17.4.2012, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



на самом деле тут есть косяк архитектуры. BinaryWriter по-умолчанию закрывает underlying stream ("тот не котором создается") при закрытии самого BinaryWriter (что лично меня сильно бесит).
То есть правильный ответ будет: достаточно закрывать BinaryWriter - после его закрытия стрим тоже будет закрыт (но не Dispose-нут).

Но "лучшие сабоководы" рекомендуют делать как описал Cheloveck - это "приятно глазу и понятно".
Также если порыть сорцы фремворка то в разных частях его можно встретить binaryWriter-клоны, которые устраняют архитекрутный косяк...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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