14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

чт<strong>е</strong>ни<strong>е</strong> и запись файлов<br />

Чт<strong>е</strong>ни<strong>е</strong> U запись с<strong>е</strong>риализованных файлов Вручную<br />

О т к р ы т ы <strong>е</strong> в п р и л о ж <strong>е</strong> н и и Б л о к н о т с<strong>е</strong>риализо ванны <strong>е</strong> ф айлы вы глядят н<strong>е</strong> о ч <strong>е</strong> н ь т I<br />

красиво. В с<strong>е</strong> записанны <strong>е</strong> вам и ф айлы нахо д я тся в папк<strong>е</strong> Ы п \О <strong>е</strong> Ь и д . Д авайт<strong>е</strong> у 1 1 Р а Ж Н Р Н и 0 1<br />

п о см о то и м на д о п о л н и т<strong>е</strong> л ь н ы <strong>е</strong> п р и <strong>е</strong> м ы р а б о ты с н и м и . 1<br />

Г<br />

С<strong>е</strong>риализу<strong>е</strong>м два объ<strong>е</strong>кта C ard в различны<strong>е</strong> ф айлы<br />

И спользуйт<strong>е</strong> н а п и с а н н ы й ран<strong>е</strong><strong>е</strong> код, ч т о б ы с<strong>е</strong>риализовать тройку кр<strong>е</strong>ст<strong>е</strong>й в ф айл t h r e e - с .<br />

d a t , а ш<strong>е</strong>ст<strong>е</strong>рку ч<strong>е</strong>рв<strong>е</strong>й — в ф айл s i x - h . d a t. У б<strong>е</strong>дит<strong>е</strong>сь, ч т о оба ф айла находятся в о д н о й<br />

папк<strong>е</strong>, и м <strong>е</strong> ю т о д и н а к о в ы й разм <strong>е</strong>р и о т к р о й т <strong>е</strong> и х в Б л о кн о т<strong>е</strong> :<br />

ß ф а й л <strong>е</strong><br />

в с т р <strong>е</strong> ч а ю т с я<br />

З Н Й К О М Ь іЄ СЛОбЙ,<br />

но по больш<strong>е</strong>-и<br />

т ст и он н<strong>е</strong>чіхтй<strong>е</strong>М-<br />

^<br />

1 three-C - Notepad<br />

File Edit F o rm at View H elp<br />

W yy ~ ^ PSerialize a deck of cards, version=l.0.0.0.<br />

Cu1ture=neutral, PubTicKeyToken=nu11 serialize_a_deck_of_cards.Cardi<br />

i < S u i t > k _ B a c k i n g F i e l d r < v a l u e > k _ B a c k i n g F i e 1 d - 5 e r i a l 1 z e _ a _ d e c k _ o f _ c a r d s . S u i t S T<br />

s e r i a T i z e _ a _ d e c k _ o f _ c a r d s . v a l u e s ,<br />

| y y y y t 5 e r ia l - i z e _ a _ d e c k _ o f _ c a r d s . s u i t s<br />

. v a l u e __ s- ‘u y^ iy s e r i a l l z e _ a _ d e c k _ o f _ c a r d s . v a l u e s . v a l u e — a, >• /<br />

О<br />

Ц и кл , сравниваюи^^й два двоичных ф айла<br />

П р и ч т <strong>е</strong> н и и б айтов из п о то ка м<strong>е</strong>тод R e a d B y t e () возвращ а<strong>е</strong>т знач<strong>е</strong>ни<strong>е</strong> ти п а i n t . П ол<strong>е</strong><br />

L e n g t h п о то ка позволя<strong>е</strong>т уб<strong>е</strong>диться, ч то ф айл п р о ч и та н полностью .<br />

b y t e [ ] f i r s t F i l e = F i l e .R e a d A l l B y t e s ( " t h r e e - с . d a t " );<br />

b y t e [ ] s e c o n d F ile = F i l e .R e a d A l l B y t e s ( " s i x - h .d a t " ) ;<br />

f o r ( i n t 1 = 0 ; i < f i r s t F i l e . L e n g t h ; i++)<br />

i f ( f i r s t F i l e [ i ] != s e c o n d F i l e [ i ] )<br />

C o n s o le .W r ite L in e (" B y te # { 0 } : { l } v e r s u s {2 }" ,<br />

i , f i r s t F i l e [ i ] , s e c o n d F i l e [ i ] );<br />

Т ак кй к эти файлы были проч<br />

м т й н и в разны<strong>е</strong> массивы, мы<br />

им<strong>е</strong><strong>е</strong>м возможность сравнить<br />

мХ побайтно. В данном случа<strong>е</strong><br />

в два разных файла были с<strong>е</strong>риализованы<br />

объ<strong>е</strong>кты одного<br />

класса, поэтому они должны<br />

быть практич<strong>е</strong>ски ид<strong>е</strong>нтичны.,<br />

но давайт<strong>е</strong> сйМи п 0СМ01^ и М ,<br />

НАСКОЛЬКО они совпадают.<br />

f<br />

i<br />

])уДын<strong>е</strong><br />

д к ш <strong>е</strong><br />

о с щ о р > о Ж Н ь 1 1<br />

Этот цикл сравнива<strong>е</strong>т п<strong>е</strong>рвы<strong>е</strong> байты из обоих<br />

файлов, потом вторы<strong>е</strong>, потом тр<strong>е</strong>тьи и т. д.<br />

Информация об обнаруж<strong>е</strong>нных различиях выводится<br />

на консоль.<br />

Запись в ф айл н<strong>е</strong> вс<strong>е</strong>гда осущ <strong>е</strong>ствля<strong>е</strong>тся<br />

с чистого листа!<br />

осторожны с м<strong>е</strong>тодом File.<br />

OpenWriteQ. Он н<strong>е</strong> удаля<strong>е</strong>т им<strong>е</strong>ющийся файл, а начина<strong>е</strong>т<br />

запись пов<strong>е</strong>рх уж<strong>е</strong> записанной информации. Поэтому мы<br />

пр<strong>е</strong>дпочли м<strong>е</strong>тод File.CreateQ, создаюи^ий новый файл.<br />

IJeJ^e^ej^H uixie с ш р а н и Щ ) U И ^ ^ о д о л ж и м !<br />

439

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!