{"id":254221,"date":"2015-03-31T22:25:02","date_gmt":"2015-03-31T18:25:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=254221"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=254221","title":{"rendered":"\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 Compound File"},"content":{"rendered":"<p>     \t\u0421 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0434\u0430\u0432\u043d\u043e, \u0431\u043e\u043b\u044c\u0448\u0435 15 \u043b\u0435\u0442. \u0417\u0430 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0443 \u043c\u0435\u043d\u044f \u043d\u0430\u043a\u043e\u043f\u0438\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043b\u044e\u0441\u0430\u0445 \u0438 \u043c\u0438\u043d\u0443\u0441\u0430\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<br \/>  \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043b\u0435\u0442\u0443, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b?<br \/>  \u0414\u043b\u044f \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043d\u0435\u043a\u043e\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 (NoSQL \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e).<br \/>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0444\u0430\u0439\u043b\u044b \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 Microsoft Office \u043e\u0442 97 \u0434\u043e 2003 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e (\u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0444\u0430\u0439\u043b\u043e\u0432), \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u0440\u0430\u0437 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0421\u0435\u0439\u0447\u0430\u0441 \u0442\u043e\u0436\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f ZIP.<\/p>\n<p>  \u0418\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b MSI \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0438 \u0434\u0430\u0436\u0435 \u0444\u0430\u0439\u043b \u043a\u044d\u0448\u0430 \u044d\u0441\u043a\u0438\u0437\u043e\u0432 \u043f\u0430\u043f\u043e\u043a Thumbs.db \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442.<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0436\u0435 Word \u0435\u0441\u0442\u044c \u0446\u0435\u043b\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441 \u0443\u0442\u0438\u043b\u0438\u0442 (Recovery for Word, Word Recovery Toolbox, Munsoft Easy Word Recovery) \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0445, \u043d\u0443 \u0438\u043b\u0438 \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043f\u044b\u0442\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c, \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b. \u0412\u044b\u0432\u043e\u0434\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u0438.<br \/>  \u0425\u043e\u0442\u044f, \u043f\u0440\u0438 \u0434\u043e\u043b\u0436\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0438\u0445 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c (\u0438 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a).<\/p>\n<p>  \u041d\u0443 \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0435\u0441\u043e\u043c\u043d\u0435\u043d\u043d\u044b\u043c \u043f\u043b\u044e\u0441\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438 \u043f\u0430\u043f\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043d\u044e\u0430\u043d\u0441. \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u0440\u043e\u0432\u0435\u043b \u043e\u043f\u0440\u043e\u0441 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u043e\u0440\u0443\u043c\u0430\u0445, \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u043f\u0440\u0438\u0447\u0435\u043c \u043f\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u2014 \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435.<br \/>  \u0412\u043e\u0442 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u0437\u0430\u043a\u0440\u043e\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0431\u0435\u043b.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>1. \u041e\u0431\u0449\u0438\u0435 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u0438 \u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438<\/h4>\n<p>  \u0421 \u0445\u043e\u0434\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u044d\u0442\u043e \u043b\u0438\u0448\u043d\u0435\u0435.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u00ab\u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c\u00bb \u2014 \u0447\u0442\u043e \u043e\u043d \u0438\u0437 \u0441\u0435\u0431\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0432\u044b\u0437\u043e\u0432\u043e\u043c StgCreateDocfile.<br \/>  \u0412 uses \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u044d\u0442\u0443 \u043f\u0430\u0440\u043e\u0447\u043a\u0443 ActiveX \u0438 AxCtrls (\u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f).<br \/>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0438\u0448\u0435\u043c:<\/p>\n<pre><code class=\"delphi\">procedure CheckHResult(Code: HRESULT); begin   if not Succeeded(Code) then     RaiseLastOSError; end;   var   TestFilePath: string;   WideBuff: WideString;   Root: IStorage; begin   TestFilePath := ExtractFilePath(ParamStr(0)) + '..\\data\\simple.bin';   ForceDirectories(ExtractFilePath(TestFilePath));     WideBuff := TestFilePath;   CheckHResult(StgCreateDocfile(@WideBuff[1],     STGM_CREATE or STGM_WRITE or STGM_SHARE_EXCLUSIVE,     0, Root)); <\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u0431\u0440\u0430\u0449\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0444\u043b\u0430\u0433\u0438.<br \/>  STGM_CREATE \u0438 STGM_WRITE \u2014 \u044d\u0442\u0438 \u0434\u0432\u0430 \u0444\u043b\u0430\u0433\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u043f\u0440\u0438\u0447\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0444\u043b\u0430\u0433\u0430 STGM_WRITE \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e (\u0438\u043d\u0430\u0447\u0435 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0444\u043e\u043a\u0443\u0441\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u00a9).<\/p>\n<p>  <b>\u0412\u0410\u0416\u041d\u041e:<\/b><br \/>  \u0410 \u0432\u043e\u0442 \u0441 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u0444\u043b\u0430\u0433\u043e\u043c STGM_SHARE_EXCLUSIVE \u0432\u0441\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0445\u0438\u0442\u0440\u0435\u0435. \u0415\u0433\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u0432\u0435\u0437\u0434\u0435, \u043a\u0440\u043e\u043c\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u00ab\u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435\u00bb, \u043e \u0447\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u0435.<br \/>  \u041c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432 <a href=\"https:\/\/www.hex-rays.com\/products\/ida\/support\/download_freeware.shtml\">IDA Pro Freeware<\/a>.<br \/>  StgCreateDocfile \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e DfOpenDocfile, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0437\u043e\u0432 VerifyPerms, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/b1e\/d55\/932\/b1ed559321ed4001b463d273a3e814f0.png\"\/><\/div>\n<p>  \u041f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 72554E62 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u043b\u0430\u0433\u0430, \u0438 \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0432\u0434\u0440\u0443\u0433 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e, \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0430 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e.<\/p>\n<p>  \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043a\u043e\u043b\u044c\u0446\u0435 \u0438 \u044f \u0434\u0430\u0436\u0435 (\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0434\u0438) \u0435\u0435 \u0437\u0430\u043d\u043e\u043f\u0438\u043b, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u043c\u043e\u0433 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041d\u043e \u2014 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043e\u0431\u0430 \u0444\u0430\u0439\u043b\u0430, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \ud83d\ude42<\/p>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0438\u0437-\u0437\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u044f \u043d\u0430 \u043d\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435, \u0431\u043b\u0438\u0436\u0435 \u043a \u043a\u043e\u043d\u0446\u0443 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0448\u043b\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438 \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 StgCreateDocfile \u0440\u0430\u0432\u0435\u043d S_OK, \u0442\u043e \u0432 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043c \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IStorage, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430.<br \/>  \u0427\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435?<\/p>\n<p>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u043a\u043e\u0440\u043d\u0435 \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b (\u0432\u0441\u0435 \u0436\u0435 \u0443 \u043d\u0430\u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430) \u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u043d\u0435\u043a\u0438\u0439 \u0431\u043b\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  \u041f\u0438\u0448\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"delphi\">procedure WriteFile(Storage: IStorage; AName: WideString; Data: AnsiString); var   Stream: IStream;   OS: TOleStream; begin   CheckHResult(Storage.CreateStream(@AName[1],     STGM_WRITE or STGM_SHARE_EXCLUSIVE, 0, 0, Stream));   OS := TOleStream.Create(Stream);   try     OS.WriteBuffer(Data[1], Length(Data));   finally     OS.Free;   end; end; <\/code><\/pre>\n<p>  \u0412 \u043d\u0435\u0439 \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u00ab\u0444\u0430\u0439\u043b\u00bb \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Storage.CreateStream. \u041e\u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u043d\u0435\u0435 StgCreateDocfile, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/aa380034(v=vs.85).aspx\">IStream<\/a>, \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0444\u043b\u0430\u0433\u0438: STGM_SHARE_EXCLUSIVE \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0430 \u0432\u0442\u043e\u0440\u044b\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0434\u0442\u0438 (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f) \u043b\u0438\u0431\u043e STGM_WRITE, \u043b\u0438\u0431\u043e STGM_READWRITE, \u043d\u043e \u0442.\u043a. \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u043b\u0430\u0433\u0430 STGM_WRITE \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 IStream \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430-\u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0438 TOleStream, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u042d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Write \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 ISequentialStream, \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f IStream, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c TOleStream \u043f\u0440\u043e\u0449\u0435.<br \/>  \u0412\u044b\u0437\u043e\u0432\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043d\u0430\u043c\u0438 \u0440\u0430\u043d\u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"delphi\">WriteFile(Root, 'RootFile', 'First file data'); <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c RootFile \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u00abFirst file data\u00bb.<\/p>\n<p>  <b>\u0412\u0410\u0416\u041d\u041e:<\/b><br \/>  \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441.\u0418\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043f\u0430\u043f\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0432 31 \u044e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 32, \u043d\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043d\u043e\u043b\u044c).<\/p>\n<p>  \u0414\u0430, \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a, \u043f\u0430\u043f\u043a\u0443 \u0438\u043b\u0438 \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0437\u0432\u0430\u0442\u044c \u00ab123\u00bb, \u043d\u043e \u043d\u0435\u043b\u044c\u0437\u044f: \u00ab\u041c\u043e\u0435 \u0434\u043b\u0438\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438 \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u0446\u0438\u0444\u0440\u00bb. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u043f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0438 (\u043e\u0442 0 \u0434\u043e 0x1F).<\/p>\n<p>  \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0432\u044b \u0441\u043a\u0430\u0436\u0435\u0442\u0435 \u2014 \u0437\u0430\u0447\u0435\u043c \u0442\u0430\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0430 \u0432\u0434\u0440\u0443\u0433 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u0440\u0430\u0437\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438?<br \/>  \u0422\u0430\u043a \u043d\u0435 \u0432\u043e\u043f\u0440\u043e\u0441, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u043d\u0430 \u0432\u0430\u0441 \u043d\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 MAX_PATH.<br \/>  500 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u043f\u043e\u043a \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u00ab\u043c\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u043c\u044f\u00bb?<br \/>  \u042d\u0442\u043e \u043b\u0435\u0433\u043a\u043e, \u0442\u0430\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u2014 \u0442\u0432\u043e\u0440\u0438\u0442\u0435 \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435. \ud83d\ude42<\/p>\n<p>  \u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0438\u043c \u0431\u0430\u0440\u0430\u043d\u0430\u043c: \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u0430\u043f\u043a\u0443.<\/p>\n<pre><code class=\"delphi\">CheckHResult(Root.CreateStorage('SubFolder',   STGM_WRITE or STGM_SHARE_EXCLUSIVE, 0, 0, Folder)); <\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0432\u044b\u0437\u043e\u0432\u0443 Storage.CreateStream, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IStorage \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443.<\/p>\n<p>  \u041c\u043e\u0436\u0435\u043c \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u043d\u0435\u0439 \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"delphi\">WriteFile(Folder, 'SubFolderFile', 'Second file data'); <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0443\u043a\u0430\u0436\u0435\u043c \u043d\u0435 Root, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u0440\u0435\u043d\u044c, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 Forder.<\/p>\n<p>  <b>\u0412\u0410\u0416\u041d\u041e:<\/b><br \/>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u044e\u0430\u043d\u0441, \u0435\u0441\u043b\u0438 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u043a\u0440\u043e\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f.<br \/>  \u0422\u0443\u0442 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043d\u0430 \u043c\u043e\u0435\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e, \u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0441 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">CheckHResult(Root.Commit(STGC_DEFAULT)); <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435. \u041d\u0443 \u0430 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0434\u0440\u0443\u0433 \u00ab\u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e\u00bb \u043f\u0435\u0440\u0435\u0434\u0443\u043c\u0430\u043b\u0438, \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0438\u0435 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430, \u0432\u044b\u0437\u0432\u0430\u0432 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">CheckHResult(Root.Revert); <\/code><\/pre>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0444\u0430\u0439\u043b\u0430.<br \/>  \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u043d\u0438\u043b\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0443\u0442\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435  @IntfClear \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 Root \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0432 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<br \/>  \u0427\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0449\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c?<\/p>\n<p>  \u0410\u0433\u0430, \u0435\u0449\u0435 \u043c\u0435\u0442\u043e\u0434\u044b CopyTo\/MoveElementTo\/EnumElements \u0438 \u043f\u0440\u043e\u0447\u0435\u0435\u2026<br \/>  \u0421 \u043d\u0438\u043c\u0438 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435, \u0430 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0430\u0440\u0445\u0438\u0432, \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043a \u0441\u0442\u0430\u0442\u044c\u0435 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0430 <a href=\"http:\/\/rouse.drkb.ru\/blog\/storage.zip\">\u0432 \u0444\u0430\u0439\u043b\u0435 &quot;..\\simple\\StorageCreateDemo.dpr&quot;<\/a><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u0441\u044e \u044d\u0442\u0443 \u0431\u0435\u0434\u0443 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c.<\/p>\n<h4>2. \u0427\u0442\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430<\/h4>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043e\u043f\u044f\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c ActiveX \u0438 AxCtrls \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f:<\/p>\n<pre><code class=\"delphi\">var   TestFilePath: string;   WideBuff: WideString;   Root: IStorage; begin   TestFilePath := ExtractFilePath(ParamStr(0)) + '..\\data\\simple.bin';     WideBuff := TestFilePath;   CheckHResult(StgOpenStorage(@WideBuff[1], nil,     STGM_READ or STGM_SHARE_DENY_WRITE, nil, 0, Root)); <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u043b\u0430\u0433 STGM_READ \u0438 \u0442\u0443\u0442 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c STGM_SHARE_DENY_WRITE \u0438\u043b\u0438 \u0432\u0441\u0435 \u0436\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c STGM_SHARE_EXCLUSIVE (\u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0444\u043b\u0430\u0433\u043e\u0432 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e).<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f Root, \u043a\u043b\u0430\u0441\u0441\u0430 IStorage, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0430 \u043a\u043e\u0440\u0435\u043d\u044c.<\/p>\n<p>  \u041a\u0430\u043a \u0431\u044b \u0432\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u043f\u043e\u0438\u0441\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435?<br \/>  \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c \u043e\u0431\u0445\u043e\u0434\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f FindFirstFile.<br \/>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435: \u044d\u0442\u043e \u043c\u0435\u0442\u043e\u0434 EnumElements \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 IStorage, \u0432\u044b\u0437\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">var   Enum: IEnumStatStg; begin   CheckHResult(Storage.EnumElements(0, nil, 0, Enum)); <\/code><\/pre>\n<p>  \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433 \u0432\u044b\u0437\u043e\u0432\u0430 FindFirstFile, \u043d\u043e \u0442\u0443\u0442 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435 \u0445\u044d\u043d\u0434\u043b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435, \u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IEnumStatStg.<\/p>\n<p>  \u0422\u0443\u0442 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043e\u0441\u0442\u0440\u0438\u0442\u044c \u0432\u0430\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<br \/>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (\u043f\u0440\u0438 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438) \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 TStatStg, \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u043e\u043b\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 pwcsName \u0442\u0438\u043f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e <b>POleStr<\/b>.<\/p>\n<p>  \u0426\u0438\u043c\u0443\u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043f\u043e\u043d\u044f\u043b\u0438?<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u044d\u0442\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u043c\u043b\u0438\u043a, \u0438\u0431\u043e OLE \u043d\u0438\u043a\u043e\u0438\u043c \u0440\u0430\u0437\u043e\u043c \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0431\u043b\u043e\u043a \u043f\u043e\u0434 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438, \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IMalloc.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u2014 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u0435\u0447\u0435\u0442 \u043a\u0430\u043a \u0432\u043e\u0434\u043e\u043f\u0430\u0434 \u0412\u0438\u043a\u0442\u043e\u0440\u0438\u044f, \u043d\u043e \u0437\u0430\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0431\u0430\u0432\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \ud83d\ude42<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430:<\/p>\n<pre><code class=\"delphi\">if (CoGetMalloc(1, ShellMalloc) &lt;&gt; S_OK) or (ShellMalloc = nil) then   raise Exception.Create('CoGetMalloc failed.'); <\/code><\/pre>\n<p>  \u041e\u043d \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043d\u0435 \u043d\u0430\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<br \/>  \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">ShellMalloc.Free(TmpElement.pwcsName); <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441:<br \/>  \u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0439 TStatStg \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>STGTY_STORAGE \u2014 \u044d\u0442\u043e \u043f\u0430\u043f\u043a\u0430<\/li>\n<li>STGTY_STREAM \u2014 \u044d\u0442\u043e \u0444\u0430\u0439\u043b<\/li>\n<\/ul>\n<p>  \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0447\u0438\u0441\u0442\u043e \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0438 \u043d\u0430\u043c \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b.<\/p>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:<\/p>\n<pre><code class=\"delphi\">procedure Enumerate(const Root: string; Storage: IStorage); var   Enum: IEnumStatStg;   TmpElement: TStatStg;   ShellMalloc: IMalloc;   Fetched: Int64;   Folder: IStorage;   AFile: IStream; begin   \/\/ \u0442.\u043a. \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 OLE, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 IMalloc   if (CoGetMalloc(1, ShellMalloc) &lt;&gt; S_OK) or (ShellMalloc = nil) then     raise Exception.Create('CoGetMalloc failed.');     \/\/ \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u0442\u043e\u0440\u0430\u0434\u0436\u0435   CheckHResult(Storage.EnumElements(0, nil, 0, Enum));     \/\/ \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u043f\u0440\u0435\u043c\u0441\u044f   Fetched := 1;   while Fetched &gt; 0 do     if Enum.Next(1, TmpElement, @Fetched) = S_OK then       \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u0447\u043a\u0430 (\u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0438)       if ShellMalloc.DidAlloc(TmpElement.pwcsName) = 1 then       begin         \/\/ \u043f\u0438\u0448\u0435\u043c \u0447\u0442\u043e \u043d\u0430\u0448\u043b\u0438         Write('Found: ', Root, '\\', AnsiString(TmpElement.pwcsName));         \/\/ \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0438\u043f \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e         case TmpElement.dwType of           \/\/ \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b - \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0435\u0433\u043e \u0438\u043c\u044f \u0438 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435           STGTY_STREAM:           begin             Writeln(' - file: ', sLineBreak);             CheckHResult(Storage.OpenStream(TmpElement.pwcsName, nil,               STGM_READ or STGM_SHARE_EXCLUSIVE, 0, AFile));             ShowFileData(AFile);             Writeln;           end;           \/\/ \u0435\u0441\u043b\u0438 \u043f\u0430\u043f\u043a\u0430 - \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0435\u0435 \u0438\u043c\u044f \u0438 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0443\u0436\u0435 \u0432 \u043d\u0435\u0439           STGTY_STORAGE:           begin             Writeln(' - folder');             CheckHResult(Storage.OpenStorage(TmpElement.pwcsName, nil,               STGM_READ or STGM_SHARE_EXCLUSIVE, nil, 0, Folder));             Enumerate(Root + '\\' + string(TmpElement.pwcsName), Folder);           end;         else           Writeln('Unsupported type: ', TmpElement.dwType);         end;         \/\/ \u0443\u0441\u0435, \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043c \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b - \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c         ShellMalloc.Free(TmpElement.pwcsName);       end; end; <\/code><\/pre>\n<p>  \u0418 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/74d\/206\/9e6\/74d2069e63cf4ed3883fc7bfe180d0ec.png\"\/><\/div>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u043b\u0430\u0432\u0435.<\/p>\n<p>  \u041a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432 \u0430\u0440\u0445\u0438\u0432\u0435 \u043a \u0441\u0442\u0430\u0442\u044c\u0435, <a href=\"http:\/\/rouse.drkb.ru\/blog\/storage.zip\">\u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0443\u0442\u0438 &quot;..\\simple\\StorageReadDemo.dpr&quot;<\/a><\/p>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435.<\/p>\n<h4>3. \u041a\u043b\u0430\u0441\u0441-\u043e\u0431\u0435\u0440\u0442\u043a\u0430<\/h4>\n<p>  \u0412 \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043c\u043d\u043e\u0439 \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c (\u0442\u044b\u0441\u044f\u0447\u0430 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0432\u0441\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b.<br \/>  \u0415\u0433\u043e \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0432 \u0430\u0440\u0445\u0438\u0432\u0435, <a href=\"http:\/\/rouse.drkb.ru\/blog\/storage.zip\">\u0432 \u043f\u0430\u043f\u043a\u0435 &quot;..\\StorageReader\\FWStorage.pas&quot;<\/a>.<\/p>\n<p>  \u0412 \u043d\u0435\u043c \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u043e\u0447\u0435\u0442\u043e\u0432. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044f \u0437\u0430\u0431\u0440\u043e\u0441\u0438\u043b \u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u044e\u043d\u0438\u043a\u043e\u0434\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Delphi \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u043e\u0440\u043d\u0438\u043d\u0433\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438.  <\/p>\n<blockquote><p>[dcc32 Warning] FWStorage.pas(860): W1057 Implicit string cast from &#8216;AnsiString&#8217; to &#8216;string&#8217;<br \/>  [dcc32 Warning] uStgReader.pas(102): W1057 Implicit string cast from &#8216;ShortString&#8217; to &#8216;string&#8217;<\/p><\/blockquote>\n<p>  \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u0432\u043f\u043e\u043b\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u0438 \u044d\u0442\u0438 \u0432\u043e\u0440\u043d\u0438\u043d\u0433\u0438 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043d\u0430 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438. (\u0415\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e \u2014 \u043b\u0435\u043d\u044c \u043f\u0440\u0438\u0447\u0435\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0449\u0435 \u0438 \u0438\u0445).<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0434\u0440\u0443\u0433 \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 (\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u044e\u0448\u0435\u0447\u043a\u0438, \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u0442\u0435), \u0438 \u043f\u043e\u0442\u043e\u043c \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0438\u043c\u044f \u0430\u0432\u0442\u043e\u0440\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435.<br \/>  \u042f \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0443\u0436\u0435 \u043d\u0435 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u044e (\u043e\u043d \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u043b), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u044c\u0431\u044b \u043e \u0435\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044f \u0431\u0443\u0434\u0443 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c \u0441\u0440\u0430\u0437\u0443.<br \/>  \u0418\u0442\u0430\u043a, \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 TFWStorage, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c, \u0438 \u043a\u043b\u0430\u0441\u0441 TFWStorageCursor, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439 \u043d\u0430\u0434 IStorage.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044e \u043c\u0435\u0442\u043e\u0434\u044b \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0430 \u043f\u043e\u0442\u043e\u043c \u0434\u0430\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438.<br \/>  \u0418\u0442\u0430\u043a, \u043a\u043b\u0430\u0441\u0441 TFWStorage, \u043e\u043d \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u0440\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432:<\/p>\n<ul>\n<li>OpenFile, OpenFileReadOnly \u2014 \u043d\u0443 \u0442\u0443\u0442 \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b. \u041e\u0431\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043a\u043b\u0430\u0441\u0441 TFWStorageCursor \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0444\u0430\u0439\u043b\u0430.<\/li>\n<li>CloseFile \u2014 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0440\u0430\u043d\u0435\u0435 \u0444\u0430\u0439\u043b.<\/li>\n<li>ReConnect \u2014 \u043f\u0435\u0440\u0435\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0440\u0430\u043d\u0435\u0435 \u0444\u0430\u0439\u043b. \u0422\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 TFWStorageCursor.<\/li>\n<li>Compress \u2014 \u0441\u0436\u0438\u043c\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0443\u0431\u0438\u0440\u0430\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438. \u0421\u0436\u0438\u043c\u0430\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442.<\/li>\n<li>IsStgValidBinaryFmt \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0432\u0441\u0435 \u043b\u0438 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0438 \u043d\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0430 \u043b\u0438 \u0435\u0433\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. \u0423\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442.<\/li>\n<li>ForceStorage \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0438\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u043f\u043a\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438. \u041f\u0443\u0442\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u043e\u0442 \u043a\u043e\u0440\u043d\u044f, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f &quot;\\&quot;. \u041f\u0440\u0438\u043c\u0435\u0440: \u00ab\u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443\\Subfolder1\\subfolder2\\subsubfolder\u00bb. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 TFWStorageCursor.<\/li>\n<\/ul>\n<p>  \u0422.\u0435. \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0442\u0434\u0430\u0442\u044c \u043d\u0430\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 TFWStorageCursor, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434\u044b \u0443 \u043d\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435:<\/p>\n<ul>\n<li>CreateStorage \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 TFWStorageCursor, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443.<\/li>\n<li>OpenStorage \u2014 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u043f\u043a\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0439. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 TFWStorageCursor, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0443\u044e \u043f\u0430\u043f\u043a\u0443.<\/li>\n<li>DeleteStorage \u2014 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0439.<\/li>\n<li>Copy \u2014 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0438\u043b\u0438 \u043f\u0430\u043f\u043a\u0443 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0438 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e. \u041f\u0430\u043f\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 TFWStorageCursor.<\/li>\n<li>MoveTo \u2014 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043c\u0435\u0442\u043e\u0434\u0443 Copy, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0438.<\/li>\n<li>CreateStream \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0444\u0430\u0439\u043b \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0435.<\/li>\n<li>ReadStream \u2014 \u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/li>\n<li>WriteStream \u2014 \u043f\u0438\u0448\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b. \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0435\u0433\u043e.<\/li>\n<li>DeleteStream \u2014 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0444\u0430\u0439\u043b \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0435.<\/li>\n<li>FlushBuffer \u2014 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/li>\n<li>Rename \u2014 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0438\u043b\u0438 \u043f\u0430\u043f\u043a\u0443 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0435.<\/li>\n<li>Enumerate \u2014 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 TFWStorageEnum.<\/li>\n<li>Backward \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u043f\u0430\u043f\u043a\u0443, \u043f\u0440\u0438\u0447\u0435\u043c \u0441\u0430\u043c \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u0442\u0441\u044f (\u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 Root).<\/li>\n<li>Release \u2014 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441.<\/li>\n<li>IsRoot \u2014 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u043d\u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/li>\n<li>GetName \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0438.<\/li>\n<li>Path \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0442\u044c \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0435.<\/li>\n<li>Storages \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u043f\u043e\u0434\u043f\u0430\u043f\u043e\u043a.<\/li>\n<\/ul>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043d\u0430\u0434 IStream \u043d\u0435\u0442, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u044d\u0442\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0432\u043e\u0437\u043b\u043e\u0436\u0435\u043d\u0430 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u044b CreateStream, ReadStream, WriteStream.<\/p>\n<p>  \u0412 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 TFWStorageEnum, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 Enumerate, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434 pacsName, \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e, \u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u043a\u043e\u043f\u0438\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0440\u043e\u0434\u043d\u044b\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u043f\u0430\u043c\u044f\u0442\u0438.<br \/>  \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 Backward, \u043a\u0430\u043a \u0442\u0430\u043a \u2014 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u0442 \u0441\u0430\u043c \u0441\u0435\u0431\u044f?<\/p>\n<p>  \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u043a\u0430\u0436\u0443, \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e.<br \/>  \u0412\u043e\u0442, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u0443\u0442\u044c: \u00ab\u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443\\Subfolder1\\subfolder2\\subsubfolder\u00bb, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u044b:<br \/>  \u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0430\u043c \u0444\u0430\u0439\u043b \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IStorage \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043a\u043e\u0440\u0435\u043d\u044c, \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c IStorage \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0438, \u043f\u043e\u0442\u043e\u043c \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u0434\u043b\u044f \u0442\u0440\u0435\u0442\u044c\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u00absubsubfolder\u00bb \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u043e.<br \/>  \u042d\u0442\u043e \u0446\u0435\u043b\u044b\u0445 4 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0433\u0434\u0435-\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c.<\/p>\n<p>  \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 TFWStorage \u0432\u0441\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435:<\/p>\n<pre><code class=\"delphi\">procedure TForm1.Button1Click(Sender: TObject); var   Path: string;   Storage: TFWStorage;   Root, Folder: TFWStorageCursor;   Data: TStringStream; begin   Storage := TFWStorage.Create;   try     \/\/ \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443     Path := ExpandFileName(ExtractFilePath(ParamStr(0)) + '..\\data\\test.bin');     \/\/ \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b     Storage.OpenFile(Path, True, Root);     \/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0432 \u043d\u0435\u043c \u0442\u0440\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0433 \u0432 \u0434\u0440\u0443\u0433\u0430 \u043f\u0430\u043f\u043a\u0438     Storage.ForceStorage(Path + '\\Subfolder1\\subloder2\\subsubfolder', Folder);     Data := TStringStream.Create;     try       \/\/ \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430       Data.WriteString('new file data.');       \/\/ \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u0448\u043b\u0438 \u043d\u0430 \u0440\u0443\u0442 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043f\u0430\u043f\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e \u0444\u0430\u0439\u043b\u0443       while Folder &lt;&gt; Root do       begin         Folder.WriteStream(Folder.GetName + '_new_file.txt', Data);         \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0430\u043f\u043a\u0443 \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0432\u044b\u0448\u0435         Folder.Backward(Folder);       end;       \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f       Root.FlushBuffer;     finally       Data.Free;     end;   finally     Storage.Free;   end; end; <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0438 \u0432\u0441\u0435, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p>  \u041d\u0443 \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432 \u043d\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0443\u044e \u0444\u043e\u0440\u043c\u0443:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/069\/bb5\/fb6\/069bb5fb6ec04644bc089c18ad13fa08.png\"\/><\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412 \u043f\u0440\u0438\u0432\u0430\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">private   FCurrentFileName: string;   FStorage: TFWStorage;   FRoot: TFWStorageCursor; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0444\u043e\u0440\u043c\u044b \u043f\u0438\u0448\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure TForm1.FormCreate(Sender: TObject); begin   \/\/ \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430   FCurrentFileName :=     ExpandFileName(ExtractFilePath(ParamStr(0)) + '..\\data\\simple.bin');   \/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435   FStorage := TFWStorage.Create;   \/\/ \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b   OpenFile(False); end; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0438\u0448\u0435\u043c \u0441\u0430\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0444\u0430\u0439\u043b\u0430, \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u044f:<\/p>\n<pre><code class=\"delphi\">procedure TForm1.OpenFile(CreateNew: Boolean); begin   \/\/ \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b, \u0435\u0441\u043b\u0438 \u043e\u043d \u0431\u044b\u043b \u043e\u0442\u043a\u0440\u044b\u0442 \u0440\u0430\u043d\u0435\u0435   FStorage.CloseFile;   \/\/ \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b   FStorage.OpenFile(FCurrentFileName,     CreateNew or not FileExists(FCurrentFileName), FRoot);   Caption := FCurrentFileName;   \/\/ \u043d\u0443 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0435\u0433\u043e \u043a\u043e\u0440\u043d\u044f   ShowStorageData(FRoot); end; <\/code><\/pre>\n<p>  \u041f\u043e\u043a\u0430 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u0434\u0430? \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0438 \u0432\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u043c.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043f\u0430\u043f\u043a\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d:<\/p>\n<pre><code class=\"delphi\">procedure TForm1.ShowStorageData(AStorage: TFWStorageCursor);     procedure AddItem(const ACaption: string; AIndex: Integer);   begin     with ListView1.Items.Add do     begin       Caption := ACaption;       case AIndex of         -1: ImageIndex := -1;         1:         begin           ImageIndex := 0;           SubItems.Add('Folder');         end       else         ImageIndex := 1;         SubItems.Add('File');       end;       \/\/ \u0442\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043f\u043e\u043b\u0435 Data, \u0433\u0434\u0435:       \/\/ -1 - \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u044b\u0448\u0435       \/\/  0 - \u0444\u0430\u0439\u043b       \/\/  1 - \u043f\u0430\u043f\u043a\u0430       \/\/ \u043f\u043e\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e \u043f\u043e\u043b\u0435       Data := Pointer(AIndex);     end;   end;   var   AData: TFWStorageEnum;   I: Integer; begin   ListView1.Items.BeginUpdate;   try     ListView1.Items.Clear;     \/\/ \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u043f\u0443\u043d\u043a\u0442, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043f\u0430\u043f\u043a\u0443 \u0432\u044b\u0448\u0435     \/\/ (\u0434\u043b\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 - \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e)     if not AStorage.IsRoot then       AddItem('..', -1);     \/\/ \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438     AStorage.Enumerate(AData);     \/\/ \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0432 ListView     for I := 0 to AData.Count - 1 do       AddItem(         string(AData.ElementEnum[I].pacsName),         Byte(AData.ElementEnum[I].dwType = STGTY_STORAGE));   finally     ListView1.Items.EndUpdate;   end; end; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b &quot;..\\data\\simple.bin&quot; \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u0438 \u0432\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/8ce\/182\/3e5\/8ce1823e522c450ab1bfff463d77aa91.png\"\/><\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443.<br \/>  \u041b\u043e\u0433\u0438\u043a\u0430 \u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0430\u044f:<\/p>\n<ul>\n<li>\u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u043a\u043b\u0438\u043a \u043f\u043e \u043f\u0430\u043f\u043a\u0435 \u2014 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u043f\u043a\u0443 \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435.<\/li>\n<li>\u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u043a\u043b\u0438\u043a \u043f\u043e \u0444\u0430\u0439\u043b\u0443 \u2014 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/li>\n<li>\u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u043a\u043b\u0438\u043a \u043f\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 &quot;..&quot; \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u044b\u0448\u0435.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f OnDblClick \u0443 ListView \u043f\u0438\u0448\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">procedure TForm1.ListView1DblClick(Sender: TObject); begin   \/\/ \u0435\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d - \u0432\u044b\u0445\u043e\u0434\u0438\u043c   if ListView1.Selected = nil then Exit;   \/\/ \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043f\u043e\u043b\u0435 Data \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430   case Integer(ListView1.Selected.Data) of     -1: \/\/ \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u044b\u0448\u0435     begin       \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0430\u043f\u043a\u0443 \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0432\u044b\u0448\u0435       FRoot.Backward(FRoot);       \/\/ \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435       ShowStorageData(FRoot);     end;     0: \/\/ \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b       EditFile;     1: \/\/ \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u043f\u043a\u0443     begin       \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443       FRoot.OpenStorage(AnsiString(ListView1.Selected.Caption), FRoot);       \/\/ \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435       ShowStorageData(FRoot);     end;   end; end; <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443 \u0434\u0432\u043e\u0439\u043d\u044b\u043c\u0438 \u043a\u043b\u0438\u043a\u0430\u043c\u0438. \ud83d\ude42<\/p>\n<p>  \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u043d\u043e\u0432\u0443\u044e \u0444\u043e\u0440\u043c\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430 \u043d\u0435\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043a\u043d\u043e\u043f\u043a\u0443 \u043e\u0442\u043c\u0435\u043d\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 TMemo \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">procedure TForm1.EditFile; var   Buff: TMemoryStream;   Data: AnsiString; begin   Buff := TMemoryStream.Create;   try     \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430     FRoot.ReadStream(AnsiString(ListView1.Selected.Caption), Buff);     \/\/ \u043f\u0435\u0440\u0435\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0432 \u0441\u0442\u0440\u043e\u043a\u0443     if Buff.Size &gt; 0 then     begin       SetLength(Data, Buff.Size);       Buff.Read(Data[1], Buff.Size);     end;     \/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u043a\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430     frmEdit := TfrmEdit.Create(Self);     try       \/\/ \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 Memo \u0437\u0430\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442       frmEdit.Memo1.Text := string(Data);       \/\/ \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u0434\u0438\u0430\u043b\u043e\u0433       if frmEdit.ShowModal &lt;&gt; mrOk then Exit;         \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438\u0437 Memo       Buff.Clear;       Data := AnsiString(frmEdit.Memo1.Text);       if Length(Data) &gt; 0 then         Buff.Write(Data[1], Length(Data));         \/\/ \u043f\u0438\u0448\u0435\u043c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e       FRoot.WriteStream(AnsiString(ListView1.Selected.Caption), Buff);         \/\/ \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f       FRoot.FlushBuffer;     finally       frmEdit.Release;     end;   finally     Buff.Free;   end; end; <\/code><\/pre>\n<p>  \u041d\u0443, \u0432\u043e\u0442 \u0443 \u043d\u0430\u0441 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u0441\u0432\u0435\u0440\u0445\u0443 \u0444\u043e\u0440\u043c\u044b.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure TForm1.btnCreateDFaseClick(Sender: TObject); begin   if SaveDialog1.Execute then   begin     FCurrentFileName := SaveDialog1.FileName;     OpenFile(True);   end; end;   procedure TForm1.btnOpenDBaseClick(Sender: TObject); begin   if OpenDialog1.Execute then   begin     FCurrentFileName := OpenDialog1.FileName;     OpenFile(False);   end; end; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0434 \u043a\u043d\u043e\u043f\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure TForm1.btnAddFolderClick(Sender: TObject); var   NewFolderName: string;   Tmp: TFWStorageCursor; begin   if InputQuery('New folder', 'Enter folder name', NewFolderName) then   begin     FRoot.CreateStorage(AnsiString(NewFolderName), Tmp);     FRoot.FlushBuffer;   end;   ShowStorageData(FRoot); end;   procedure TForm1.btnDelFolderClick(Sender: TObject); begin   if Application.MessageBox(     PChar(Format('Delete folder: &quot;%s&quot;?', [ListView1.Selected.Caption])),     'Delete folder', MB_ICONQUESTION or MB_YESNO) = ID_YES then   begin     FRoot.DeleteStorage(AnsiString(ListView1.Selected.Caption));     FRoot.FlushBuffer;     ShowStorageData(FRoot);   end; end; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure TForm1.btnAddFileClick(Sender: TObject); var   NewFileName: string; begin   if InputQuery('New file', 'Enter file name', NewFileName) then   begin     FRoot.CreateStream(AnsiString(NewFileName));     FRoot.FlushBuffer;   end;   ShowStorageData(FRoot); end;   procedure TForm1.btnDelFileClick(Sender: TObject); begin   if Application.MessageBox(     PChar(Format('Delete file: &quot;%s&quot;?', [ListView1.Selected.Caption])),     'Delete file', MB_ICONQUESTION or MB_YESNO) = ID_YES then   begin     FRoot.DeleteStream(AnsiString(ListView1.Selected.Caption));     FRoot.FlushBuffer;     ShowStorageData(FRoot);   end; end; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0443 \u0432\u043e\u0442 \u0438 \u0432\u0441\u0435, \u043f\u0440\u043e\u0449\u0435 \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u0443\u0436\u0435 \u043d\u0435\u043a\u0443\u0434\u0430 \ud83d\ude42<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0430 \u0447\u0442\u043e-\u0436\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 DOC \u0444\u0430\u0439\u043b\u0430? \ud83d\ude42<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/f20\/178\/93d\/f2017893d61342e5961c464bae5b7c16.png\"\/><\/div>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b, \u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0431\u0440\u0430\u0442\u044c \u0432 \u0430\u0440\u0445\u0438\u0432\u0435, <a href=\"http:\/\/rouse.drkb.ru\/blog\/storage.zip\">\u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0443\u0442\u0438: &quot;..\\StorageReader\\&quot;<\/a><\/p>\n<h4>4. \u041c\u0438\u043d\u0443\u0441\u044b Compound File<\/h4>\n<p>  \u0422\u0430\u043a \u0443\u0436 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u0441\u0435\u0445 \u0441\u0432\u043e\u0438\u0445 \u043f\u043b\u044e\u0441\u0430\u0445, \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0446\u0435\u043b\u044b\u043c \u0440\u044f\u0434\u043e\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043c\u0438\u043d\u0443\u0441\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435.<\/p>\n<p>  \u0421\u0430\u043c\u044b\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0438\u043d\u0443\u0441 \u2014 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u043c\u0435\u043d \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043f\u0430\u043f\u043e\u043a.<\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u044f \u0441\u0434\u0435\u043b\u0430\u044e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432\u0430\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438\u0437 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438.<br \/>  \u0414\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044b\u0439 \u0433\u043e\u0434 \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u041f\u041e \u0434\u043b\u044f \u0441\u043c\u0435\u0442\u0447\u0438\u043a\u043e\u0432 \u2014 \u0441\u043c\u0435\u0442\u044b \u0434\u0435\u043b\u0430\u0435\u043c.<br \/>  \u041d\u043e \u0443 \u043d\u0438\u0445 \u0432\u0441\u0435 \u0445\u0438\u0442\u0440\u043e, \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0432\u0437\u044f\u0442\u044c \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043c\u0435\u0442\u0443. :))<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0441\u0442\u0440\u043e\u0439\u043a\u0430, \u0443 \u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430, \u0430 \u0443\u0436\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u043c\u0435\u0442\u044b.<\/p>\n<p>  \u042d\u0442\u0430 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0436\u0435\u0441\u0442\u043a\u0430\u044f, \u043f\u0440\u0438\u0447\u0435\u043c \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443:<\/p>\n<ul>\n<li>\u0421\u0442\u0440\u043e\u0439\u043a\u0430 \u2192 \u041e\u0431\u044a\u0435\u043a\u0442 \u2192 \u0421\u043c\u0435\u0442\u0430<\/li>\n<li>\u0421\u0442\u0440\u043e\u0439\u043a\u0430 \u2192 \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u2192 \u041e\u0431\u044a\u0435\u043a\u0442 \u2192 \u0421\u043c\u0435\u0442\u0430<\/li>\n<li>\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u0440\u043e\u0435\u043a \u2192 \u0421\u0442\u0440\u043e\u0439\u043a\u0430 \u2192 \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u2192 \u041e\u0431\u044a\u0435\u043a\u0442 \u2192 \u0421\u043c\u0435\u0442\u0430<\/li>\n<\/ul>\n<p>  \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043f\u0440\u043e\u0447\u0435\u0435 (\u043a\u0440\u043e\u043c\u0435 \u0441\u043c\u0435\u0442) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u2014 \u043f\u043e \u0441\u0443\u0442\u0438 \u043f\u0430\u043f\u043a\u0438, \u043d\u043e \u044d\u0442\u0438 \u043f\u0430\u043f\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0434\u0442\u0438 \u0432 \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0438\u043d\u0430\u0447\u0435 \u0432\u0441\u0435 \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u0443 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0430 \u0442\u0438\u043f \u043f\u0430\u043f\u043a\u0438 (\u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u0443\u0440\u043e\u0432\u043d\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u043e\u043d\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u00ab\u0441\u0442\u0440\u043e\u0439\u043a\u0430\/\u043e\u0431\u044a\u0435\u043a\u0442\/\u043e\u0447\u0435\u0440\u0435\u0434\u044c\u00bb) \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043e\u0431\u044b\u0447\u043d\u044b\u043c INI \u0444\u0430\u0439\u043b\u043e\u043c \u0432 \u0435\u0435 \u043a\u043e\u0440\u043d\u0435 (\u0430-\u043b\u044f thumbs.db), \u0442\u043e \u0447\u0442\u043e \u043d\u0430\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0437\u043b\u0438\u0448\u043d\u0435 \u0448\u0430\u043b\u043e\u0432\u043b\u0438\u0432\u044b\u0435 \u0440\u0443\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u044f\u043c\u043e \u0432 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u0435 \u043f\u043e\u0440\u0443\u0448\u0438\u0442\u044c \u0432\u0441\u044e \u044d\u0442\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443?<\/p>\n<p>  \u0412\u043e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u043d\u0430\u043c\u0438 \u0438 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u043a\u0430\u043a \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u043b\u0435\u0437\u0442\u044c \u0438 \u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044c \u0442\u0430\u043c \u0432\u0441\u0435.<br \/>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0430\u043f\u043e\u043a \u0438 \u043d\u0435 \u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u044b\u043b\u0435\u0437 \u043d\u044e\u0430\u043d\u0441: \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043d\u043e\u0432\u0443\u044e \u0441\u043c\u0435\u0442\u0443 \u0432 \u043d\u0430\u0448\u0435\u043c \u041f\u041e, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u043e \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0441\u043c\u0435\u0442\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0441\u043c\u0435\u0447\u0438\u0432\u0430\u0435\u0442.<br \/>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443: \u00ab\u041a\u0430\u043f\u0438\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043c\u043e\u043d\u0442 \u043f\u0443\u0442\u0438 \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u0433\u043e\u0434\u043d\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445. \u0423\u0447\u0430\u0441\u0442\u043e\u043a \u0421\u0435\u043b\u044d\u0433\u0432\u043e\u0436-\u0427\u0438\u043c, 1\u043f\u0443\u0442\u044c, 142 \u043f\u043a1 \u2014 163 \u043f\u043a10, \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c 22, 0\u043a\u043c\u00bb.<\/p>\n<p>  \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u2014 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u043b\u0438\u043d\u0443 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u0443 \u043d\u0430\u0441 \u0432\u0441\u0435\u0433\u043e 31 \u0441\u0438\u043c\u0432\u043e\u043b, \u0430 \u044d\u0442\u043e \u0432 \u043a\u0440\u0430\u0439\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435: \u00ab\u041a\u0430\u043f\u0438\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043c\u043e\u043d\u0442 \u043f\u0443\u0442\u0438 \u043d\u0430 \u0441\u0442\u0430\u0440\u00bb.<br \/>  \u041d\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0437\u0432\u0430\u0442\u044c: \u00ab\u0420\u0435\u043c\u043e\u043d\u0442 \u043f\u0443\u0442\u0451\u0432\u00bb.<\/p>\n<p>  \u0418 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0440\u0430\u0448\u043d\u043e \u043e\u0431\u0438\u0434\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0440\u0435\u0436\u0435\u043c \u0435\u0433\u043e \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u043f\u043e \u0434\u043b\u0438\u043d\u0435 \u043f\u0443\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0447\u0442\u043e-\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>  \u041d\u0430\u043c\u0438 \u0431\u044b\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445:<br \/>  \u0427\u0442\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430, \u0447\u0442\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b (\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u2014 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u043d\u0430\u0448\u0438\u043c \u041f\u041e), \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0438\u0437 \u0441\u0435\u0431\u044f \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u043b\u0435\u0436\u0430\u043b \u0444\u0430\u0439\u043b\u0438\u043a \u00abProperties\u00bb, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0441\u044f \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0430\u043f\u043a\u0430, \u0442\u043e, \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0432 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u043e\u043d\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442) \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u043d\u0430\u0448\u0438\u043c \u041f\u041e \u0438\u043c\u044f (\u043f\u0440\u0438\u0447\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u043b\u0438\u043d\u0443 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0430\u0436 \u0432 1024 \u0431\u0430\u0439\u0442\u0430 \u2014 \u043d\u0435 \u043f\u043e\u0436\u0430\u0434\u043d\u0438\u0447\u0430\u043b\u0438, \u0438 \u0441 \u044d\u0442\u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435).<br \/>  \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043f\u0430\u043f\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u044f\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0444\u0430\u0439\u043b\u043e\u043c \u2014 \u0442\u043e \u0432 \u043d\u0435\u0439 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u043b\u0441\u044f \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b\u0438\u043a \u2014 \u00abData\u00bb, \u0433\u0434\u0435 \u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u043e\u0441\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u0430\u043c\u043e\u0439 \u0441\u043c\u0435\u0442\u044b.<\/p>\n<p>  \u0410 \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/a60\/a09\/4e2\/a60a094e282c44ae85fed09a534547eb.png\"\/><\/div>\n<p>  \u0421\u043f\u0440\u043e\u0441\u0438\u0442\u0435, \u0447\u0442\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0430\u043f\u043e\u043a \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435?<br \/>  \u0414\u0430 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0435\u0447\u0435\u043d\u043d\u044b\u0435 GUID \u0432 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u00ab\u044d\u043a\u0432\u0438\u043b\u0438\u0431\u0440\u0438\u0441\u0442\u0438\u043a\u043e\u0439\u00bb \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043f\u0438\u0445\u043d\u0443\u0442\u044c \u0432 \u043f\u0440\u0435\u0441\u043b\u043e\u0432\u0443\u0442\u044b\u0435 31 \u0431\u0430\u0439\u0442 \u0438\u043c\u0435\u043d\u0438 \u043f\u0430\u043f\u043a\u0438. \ud83d\ude42<\/p>\n<p>  \u0414\u0430 \u0438 \u043b\u0430\u0434\u043d\u043e \u0431\u044b \u0441 \u044d\u0442\u0438\u043c\u0438 31 \u0431\u0430\u0439\u0442\u0430\u043c\u0438 \u0438\u043c\u0435\u043d\u0438, \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u043c\u044b \u0432\u044b\u0448\u043b\u0438 \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043c\u0438\u043d\u0443\u0441.<\/p>\n<p>  \u0412\u043e\u0442 \u0437\u0430\u0434\u0443\u043c\u0430\u0439\u0442\u0435\u0441\u044c, \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0430\u043c \u0447\u0442\u043e \u0432\u0430\u0448\u0435 \u041f\u041e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 5 \u043c\u0438\u043d\u0443\u0442?<br \/>  \u0414\u0430-\u0434\u0430, \u044f \u043d\u0435 \u043e\u0448\u0438\u0431\u0441\u044f, \u0440\u043e\u0432\u043d\u043e 5 \u043c\u0438\u043d\u0443\u0442, \u0430 \u043d\u0435 \u0441\u0435\u043a\u0443\u043d\u0434. \u041c\u043e\u0436\u043d\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u043f\u0438\u0442\u044c \u0447\u0430\u0439, \u043f\u0438\u0446\u0446\u0443 \u0437\u0430\u043a\u0430\u0437\u0430\u0442\u044c, \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0434\u043d\u044f \u2014 \u0436\u0434\u0435\u043c \u0441\u0442\u0430\u0440\u0442\u0430 \u0442\u0432\u043e\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430. \ud83d\ude42<\/p>\n<p>  \u0415\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0442\u0430\u043a\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b, \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u00ab\u041f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0435 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u044b\u00bb \u2014 \u0438\u0445 \u043c\u043d\u043e\u0433\u043e \u043f\u043e \u0432\u0441\u0435\u0439 \u0420\u043e\u0441\u0441\u0438\u0438 \u0438 \u0442\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043c\u0435\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0444\u0438 \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u00ab\u041e\u0413\u0420\u041e\u041c\u0415\u041d\u041d\u0415\u0419\u0428\u0418\u041c\u00bb \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0441\u043c\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0442\u0430\u043a\u0430\u044f.<\/p>\n<p>  \u0418 \u0432\u043e\u0442 \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u0435\u043b \u0431\u0430\u0433\u0440\u0435\u043f\u043e\u0440\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430: \u00ab\u0420\u0435\u0431\u044f\u0442, \u043c\u044b \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043b\u0438 \u0436\u0434\u0430\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u041f\u041e, \u0434\u0430 \u0447\u0442\u043e \u0436 \u0442\u0430\u043a\u043e\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c?\u00bb.<\/p>\n<p>  \u0410 \u0447\u0430\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u043d\u0442\u043e\u0440 \u0435\u0449\u0435 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 (\u043e\u0441\u043c\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0441\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u2014 \u043e\u0442\u043a\u0443\u0434\u0430 \u0442\u043e\u0440\u043c\u043e\u0437\u0430 \u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0434\u0438\u043a\u0438\u0435 \u043b\u0435\u0437\u0443\u0442?!!!<\/p>\n<p>  \u041d\u043e \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043f\u043e\u0432\u0435\u0437\u043b\u043e, \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u044b\u043b\u0438 \u043d\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0438 \u043d\u0430\u043c \u0438\u0445 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438.<br \/>  \u0418 \u0432\u043e\u0442, \u043b\u0435\u0436\u0438\u0442 \u0443 \u043c\u0435\u043d\u044f \u0432 \u043f\u0430\u043f\u043a\u0435<b> \u043f\u043e\u0447\u0442\u0438 2 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b\u0438\u043a<\/b> \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 200 \u0442\u044b\u0441\u044f\u0447\u0430\u043c\u0438 \u0441\u043c\u0435\u0442 \u043d\u0430 \u0431\u043e\u0440\u0442\u0443 (\u0442\u0432\u043e\u044e \u0434\u0438\u0432\u0438\u0437\u0438\u044e). \u042f \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043e\u0444\u0438\u0433\u0435\u043b \u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430, \u043d\u043e\u2026<br \/>  \u041d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u2014 \u0445\u043e\u0447\u0435\u0448\u044c \u043d\u0435 \u0445\u043e\u0447\u0435\u0448\u044c, \u0444\u0430\u0439\u043b \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0437\u0430 \u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u043b\u0441\u044f (\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435 \u043f\u043e\u0439\u043c\u0435\u0442\u0435 \u043f\u043e\u0447\u0435\u043c\u0443).<\/p>\n<p>  \u041d\u0430\u0447\u0430\u043b\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u0438 \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c \u0431\u044b\u043b\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043c\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0443\u0436\u0435 \u0432 50 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442, \u0438\u0431\u043e \u043f\u0440\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043e \u0434\u0432\u0435\/\u0442\u0440\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438.<\/p>\n<p>  \u0422\u0435\u0441\u0442\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u0435\u0441\u0442\u0430\u043c\u0438, \u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u0434\u043e.<br \/>  \u0412 \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0435 \u0441\u0440\u043e\u043a\u0438 \u0431\u044b\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u0441\u043b\u0443\u0436\u0431\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0441\u044c \u0443\u0436\u0435 \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0430 \u0432 \u0431\u0430\u0437\u0435. \u041f\u0440\u0438\u0447\u0435\u043c, \u0441\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043a\u0430\u043a \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e Firebird\/Interbase, \u0442\u0430\u043a \u0438 \u0431\u0430\u0437 \u043f\u043e\u0441\u0435\u0440\u044c\u0435\u0437\u043d\u0435\u0439 \u2014 MS SQL\/Olracle, \u0438 \u0434\u043e \u043a\u0443\u0447\u0438 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u043b\u0438 ADO. \u0415\u0449\u0435 \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u0431\u0430\u0437\u0443.<\/p>\n<p>  \u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u2014 \u043b\u0435\u0442\u0430\u0435\u0442, \u043c\u0430\u043c\u0430 \u043d\u0435 \u0433\u043e\u0440\u044e\u0439, \u043d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441.<\/p>\n<p>  \u041d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0432\u0437\u044f\u0442\u044c \u0438 \u043f\u0440\u043e\u043a\u0438\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0434\u0432\u0443\u0445\u0433\u0438\u0433\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u0431\u0430\u0437\u0443.<br \/>  \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442, \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c OpenStorage, \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f, \u043f\u0440\u0438\u0447\u0435\u043c \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0430\u043b\u044c\u0448\u0435 \u0442\u0440\u0435\u043f\u044b\u0445\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u2014 \u043b\u044e\u0431\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439.<\/p>\n<p>  \u0412\u043e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0432 TFWStorage \u0438 \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430: ReConnect \u2014 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0438 \u043c\u0435\u0442\u043e\u0434 ForceStorage, \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u0443 \u043f\u0430\u043f\u043a\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c: \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u044b \u0435\u0449\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0431\u0438\u043b\u0438 \u0448\u0438\u0448\u0435\u043a \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0432 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u043c \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0435. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u044b\u043b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 (\u0418\u0421\u0421) \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u043c\u0435\u0442\u0447\u0438\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 (\u0441\u043a\u0430\u0436\u0435\u043c \u2014 \u043c\u0435\u0441\u0442\u044f\u0447\u043a\u043e\u0432\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 MSDN).<\/p>\n<p>  \u0418 \u0432\u043e\u0442 \u043d\u0430\u0441\u0442\u0430\u0435\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u0448 \u0442\u0435\u0445\u043d\u0430\u0440\u044c, \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0437\u0430 \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u044b \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442: \u00ab\u0431\u0430\u0437\u0430 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u044f \u043d\u0435 \u043c\u043e\u0433\u0443 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u00bb.<\/p>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c.<br \/>  \u0414\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0431\u0430\u0437\u0430, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0438\u0437 \u0441\u0435\u0431\u044f \u0442\u043e\u0442\u0436\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043d\u0435\u0433\u043e \u0432\u0441\u0435\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 StgOpenStorage.<br \/>  \u041f\u0440\u0438\u043f\u043b\u044b\u043b\u0438\u2026<\/p>\n<p>  \u0421\u043c\u043e\u0442\u0440\u044e \u0440\u0430\u0437\u043c\u0435\u0440 \u2014 \u0447\u0442\u043e-\u0442\u043e \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 4 \u0433\u0438\u0433\u043e\u0432, \u043d\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u044b\u043b\u0435\u0437\u043b\u0438 \u0437\u0430 \u043b\u0438\u043c\u0438\u0442.<br \/>  \u041c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0440\u043e\u0431 \u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u0434\u0435\u043b\u043e \u0441 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0444\u0430\u0439\u043b\u0430. \u041f\u043e\u0431\u0435\u0434\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u2014 \u0434\u0430 \u043e\u043d \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0441\u044f \u0437\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u043b\u0438\u0434\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u043e (\u043a\u0430\u043a \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0440\u0430\u043d\u0435\u0435) \u2014 \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 MSDN \u0434\u043b\u044f \u0441\u043c\u0435\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u043e\u043d \u0431\u044b\u043b \u0432 \u0432\u0438\u0434\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u041b\u044e\u0434\u0438 \u0442\u0443\u0434\u0430 \u0441\u0442\u0443\u0447\u0430\u043b\u0438\u0441\u044c \u043f\u043e \u0441\u0435\u0442\u043a\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u044b\u043b \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043d\u0430\u0442\u044b\u043a\u0430\u043b\u0441\u044f \u0435\u0449\u0435 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0433\u043b\u044e\u043a:<br \/>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b(\u0441\u0442\u0440\u0438\u043c) \u0438 \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u2014 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u043e\u0431\u0449\u0435, \u0432\u044b\u0437\u043e\u0432\u043e\u043c EnumElements. \u0410 IEnumStatStg, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0434\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0442\u0440\u0438\u043c\u0430. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0437\u043e\u0432 CreateStream \u0441 \u0446\u0435\u043b\u044c\u044e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0433\u043e, \u043d\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c DestroyElement \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0438\u043c\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u043c CreateStream, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043e\u0444\u0438\u0433\u0435\u043d\u043d\u044b\u0439 \u0442\u0430\u043a\u043e\u0439 \u0437\u0432\u043e\u043d\u043e\u043a: \u00ab\u0447\u0442\u043e-\u0442\u043e \u0441 \u043d\u0430\u0448\u0438\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0441\u043e\u0432\u0441\u0435\u043c \u0431\u0435\u0434\u0430\u00bb.<\/p>\n<p>  \u0410 \u0440\u0430\u0437 \u0441 \u043d\u0438\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u043e, \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u0435\u0449\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b.<\/p>\n<h4>5. \u0427\u0438\u0442\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 RAW \u0440\u0435\u0436\u0438\u043c\u0435<\/h4>\n<p>  \u042f \u0434\u0443\u043c\u0430\u044e, \u0443 \u0432\u0430\u0441 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c \u0442\u0430\u043a\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435: \u041d\u0443, \u043d\u0438\u0444\u0438\u0433\u0430 \u0441\u0435\u0431\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432? \u0417\u0430\u0447\u0435\u043c \u0430\u0432\u0442\u043e\u0440 \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u043e\u0433\u0434\u0430 \u043e \u043d\u0438\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442?<\/p>\n<p>  \u042d\u0442\u043e \u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435. \u042f \u043c\u043e\u0433\u0443 \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u0439 \u0432\u043e\u0440\u043e\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0442\u0430 \u0438\u043b\u0438 \u0438\u043d\u0430\u044f, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0432\u0430\u043b\u044c\u043d\u0430.<\/p>\n<p>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0435\u0441\u043b\u0438 \u0431\u044b \u0432\u044b \u0437\u043d\u0430\u043b\u0438 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u0443\u0434\u0430\u043b\u044f\u0435\u043c\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 NTFS \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u043a\u043e\u043b\u044c\u0446\u0430 \u0438 \u0431\u0435\u0437 \u0441\u0438\u043b\u044c\u043d\u044b\u0445 \u0432\u0440\u0435\u043c\u044f\u0437\u0430\u0442\u0440\u0430\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e API \u2014 \u0432\u044b \u0436\u0435 \u043d\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b? \ud83d\ude42<\/p>\n<p>  \u0410 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438, \u043d\u043e \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, MS <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/dd942138.aspx\">\u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0438\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438\u0439 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0432\u0438\u0434\u0435<\/a>, \u0430 \u043a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <a href=\"http:\/\/poi.apache.org\/poifs\/fileformat.html\">\u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0438\u0437 \u044f\u0432\u043e\u0432\u0441\u043a\u043e\u0433\u043e POIFS<\/a>, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f <a href=\"http:\/\/en.wikipedia.org\/wiki\/Compound_File_Binary_Format\">\u0432\u044b\u0434\u0435\u0440\u0436\u043a\u0430 \u0438\u0437 Wiki<\/a> \u0434\u0430 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b\u0438\u043a \u0441 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 POIFS (\u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u043c\u0430\u043c), \u043d\u043e \u044f \u0435\u0433\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u0436\u0435 \u043d\u0435 \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 (\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043f\u0440\u043e\u0448\u043b\u043e).<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043e\u0442\u043a\u0440\u044b\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442 \u043d\u0435 \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u043e? \ud83d\ude42<br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443.<\/p>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a:<\/p>\n<pre><code class=\"delphi\">TPoifsFileHeader = packed record   \/\/ \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440. \u0412\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f (0 x E011CFD0, 0 x E11AB1A1)   _abSig: array [0..7] of Byte;   \/\/ Class ID. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f WriteClassStg, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f GetClassFile\/ReadClassStg.    \/\/ \u0414\u043b\u044f Excel \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e = 0   _clid: TGUID;   \/\/ \u041c\u043b\u0430\u0434\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430.   _uMinorVersion: USHORT;   \/\/ \u0421\u0442\u0430\u0440\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Dll\/\u0444\u043e\u0440\u043c\u0430\u0442\u0430   _uDllVersion: USHORT;   \/\/ 0 x FFFE \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Intel \u043d\u043e\u0442\u0430\u0446\u0438\u044f   _uByteOrder: USHORT;   \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u043a\u0442\u043e\u0440\u0430. \u041e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0432\u043d\u043e 9, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 512 \u0431\u0430\u0439\u0442 (2 ^ 9)   _uSectorShift: USHORT;   \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u043c\u0438\u043d\u0438-\u0441\u0435\u043a\u0442\u043e\u0440\u0430. \u041e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0432\u043d\u043e 6, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 64 \u0431\u0430\u0439\u0442 (2 ^ 6)   _uMiniSectorShift: USHORT;   \/\/ \u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u043d\u043e 0   _usReserved: USHORT;   \/\/ \u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u043d\u043e 0   _ulReserved1: ULONG;   \/\/ \u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u043d\u043e 0   _ulReserved2: ULONG;   \/\/ \u0427\u0438\u0441\u043b\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f FAT.   \/\/ \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043c\u0435\u043d\u0435\u0435 7\u041c\u0431, \u0442\u043e \u0440\u0430\u0432\u043d\u043e 1, \u0435\u0441\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 1 \u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f DIF \u0441\u0435\u043a\u0442\u043e\u0440.   _csectFat: ULONG;   \/\/ \u041d\u043e\u043c\u0435\u0440 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f Property Set Storage   \/\/ (\u0435\u0449\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 FAT Directory \u0438\u043b\u0438 Root Directory Entry)   _sectDirStart: ULONG;   \/\/ \u041f\u043e\u0434\u043f\u0438\u0441\u044c \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439.   _signature: ULONG;   \/\/ \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0438\u043d\u0438-\u043f\u043e\u0442\u043e\u043a\u0430. \u041e\u0431\u044b\u0447\u043d\u043e 4096   _ulMiniSectorCutoff: ULONG;   \/\/ \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u043a\u0442\u043e\u0440 \u043c\u0438\u043d\u0438-FAT.   \/\/ \u0415\u0441\u043b\u0438 (-2), \u0442\u043e \u043c\u0438\u043d\u0438-\u043f\u043e\u0442\u043e\u043a \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.   _sectMiniFatStart: ULONG;   \/\/ \u0427\u0438\u0441\u043b\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043c\u0438\u043d\u0438-FAT. 0, \u0435\u0441\u043b\u0438 \u043c\u0438\u043d\u0438-\u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0435\u0442   _csectMiniFat: ULONG;   \/\/ \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u043a\u0442\u043e\u0440 \u0432 DIF \u0446\u0435\u043f\u043e\u0447\u043a\u0435.   \/\/ \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043c\u0435\u043d\u0435\u0435 7\u041c\u0431, \u0442\u043e DIF \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e (-2)   _sectDifStart: ULONG;   \/\/ \u0447\u0438\u0441\u043b\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 DIF \u0446\u0435\u043f\u043e\u0447\u043a\u0435.0, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b &lt; 7\u041c\u0431   _csectDif: ULONG;   \/\/ \u041d\u043e\u043c\u0435\u0440\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 109 \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f FAT.   \/\/ \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043c\u0435\u043d\u0435\u0435 7\u041c\u0431, \u0442\u043e \u0441\u0435\u043a\u0442\u043e\u0440 \u043e\u0434\u0438\u043d, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f (-1).   _sectFat: array [0..108] of ULONG; end; <\/code><\/pre>\n<p>  \u041d\u0443, \u0442\u0443\u0442 \u0434\u0443\u043c\u0430\u044e \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0432\u0441\u0435 \u043a\u0430\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u2014 \u044d\u0442\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435.<\/p>\n<p>  \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0432 \u043f\u043e\u043b\u044f\u0445 _uSectorShift \u0438 _uMiniSectorShift \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0434\u0432\u043e\u0439\u043a\u0438, \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0443\u0436\u043d\u043e \u0438\u0445 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443.<\/p>\n<pre><code class=\"delphi\">procedure TPoifsFile.InitHeader; begin   FStream.ReadBuffer(FHeader, SizeOf(TPoifsFileHeader));   FHeader._uSectorShift := Round(IntPower(2, FHeader._uSectorShift));   FHeader._uMiniSectorShift := Round(IntPower(2, FHeader._uMiniSectorShift)); end; <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c FAT, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0444\u0430\u0439\u043b\u0430\u0445, \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u0435\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043f\u043e\u043b\u044f _ulMiniSectorCutoff \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure TPoifsFile.ComposeFAT; var   I, J, X, FatLength: Integer;   FatBlock: TPoifsFatBlock;   CurrentFat, Offset: Integer;   XFat: array of Integer; begin   \/\/ \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b-\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 FAT (\u0438\u0434\u0443\u0442 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043f\u043e 128 \u0437\u0430\u043f\u0438\u0441\u0435\u0439)   \/\/ \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 DIF \u0441\u0435\u043a\u0442\u043e\u0440\u0430, \u0442\u043e _csectFat \u0440\u0430\u0432\u0435\u043d \u0435\u0434\u0438\u043d\u0438\u0446\u0435   FatLength := FHeader._csectFat * 128;     \/\/ \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a FAT   SetLength(FFat, FatLength);       \/\/ \u0438 \u043e\u0444\u0444\u0441\u0435\u0442\u044b \u043d\u0430 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u0435   SetLength(FFatOffset, FatLength);     \/\/ \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c DIF \u0441\u0435\u043a\u0442\u043e\u0440, \u0442\u043e FAT \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 109 \u043f\u043e\u043b\u044f\u0445   \/\/ \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u0435\u0436\u0430\u0442 \u0432 DIF \u0441\u0435\u043a\u0442\u043e\u0440\u0435   for I := 0 to IfThen(FHeader._csectDif &gt; 0, 108, FHeader._csectFat - 1) do   begin     \/\/ \u0447\u0438\u0442\u0430\u0435\u043c FAT \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u0443\u0441\u043a\u0430\u043c\u0438 \u043f\u043e 128 \u0437\u0430\u043f\u0438\u0441\u0435\u0439     FatBlock := TPoifsFatBlock(GetBlock(FHeader._sectFat[I]));     for J := 0 to 127 do     begin       FFat[I * 128 + J] := FatBlock[J];       \/\/ \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e \u043e\u0444\u0444\u0441\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435, \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f       FFatOffset[I * 128 + J] := FStream.Position - SizeOf(TPoifsBlock);     end;   end;     \/\/ \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 DIF \u0441\u0435\u043a\u0442\u043e\u0440   if FHeader._sectDifStart = 0 then Exit;     \/\/ \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u0434\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0431\u043b\u043e\u043a\u0438 FAT \u0438\u0437 \u043d\u0435\u0433\u043e   Offset := FHeader._sectDifStart;     \/\/ \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 XFAT \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u0444\u0444\u0441\u0435\u0442\u043e\u0432 \u043d\u0430 FAT \u0431\u043b\u043e\u043a\u0438   SetLength(XFat, 128);     \/\/ \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e FAT \u0431\u043b\u043e\u043a\u0430   CurrentFat := 13951; \/\/109 * 128 - 1 BAT     for X := 0 to FHeader._csectDif - 1 do   begin       \/\/ \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u043a\u0442\u043e\u0440\u0430 (\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 _uSectorShift \u0438\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430)     \/\/ \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u0444\u0430\u0439\u043b\u0435     FStream.Position := GetBlockOffset(Offset);       \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f FAT \u0431\u043b\u043e\u043a\u043e\u0432     FStream.ReadBuffer(XFat[0], 128 * SizeOf(DWORD));       \/\/ \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u0431\u043b\u043e\u043a\u0430 \u043e\u0444\u0444\u0441\u0435\u0442\u043e\u0444     \/\/ \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u043e\u0444\u0441\u0435\u0442\u043e\u0444     \/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0440\u0443\u0442\u0438\u043c \u0446\u0438\u043a\u043b \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430     for I := 0 to 126 do     begin         \/\/ \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043e\u0444\u0444\u0441\u0435\u0442, \u0435\u0441\u043b\u0438 \u043e\u043d \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u0435\u043d,       \/\/ \u0431\u043b\u043e\u043a\u043e\u0432 FAT \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442       if XFat[I] &lt; 0 then Exit;         \/\/ \u0447\u0438\u0442\u0430\u0435\u043c FAT \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u0443\u0441\u043a\u0430\u043c\u0438 \u043f\u043e 128 \u0437\u0430\u043f\u0438\u0441\u0435\u0439       FatBlock := TPoifsFatBlock(GetBlock(XFat[I]));         for J := 0 to 127 do       begin         Inc(CurrentFat);         FFat[CurrentFat] := FatBlock[J];         FFatOffset[CurrentFat] := FStream.Position - SizeOf(TPoifsBlock);       end;     end;       \/\/ \u043d\u043e\u0432\u044b\u0439 \u043e\u0444\u0444\u0441\u0435\u0442 \u0431\u0435\u0440\u0435\u043c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430     Offset := XFat[127];   end; end; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 TPoifsFatBlock, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 128 Integer.<br \/>  \u0410 \u0442\u0430\u043a \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 GetBlockOffset \u0438 GetBlock. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0443\u0442\u0438.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function TPoifsFile.GetBlockOffset(BlockIndex: Integer): Int64; begin   Result := HEADER_SIZE + FHeader._uSectorShift * BlockIndex; end;   function TPoifsFile.GetBlock(Adress: Integer): TPoifsBlock; begin   FStream.Position := GetBlockOffset(Adress);   FStream.ReadBuffer(Result, SizeOf(TPoifsBlock)); end; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u0444\u0430\u0442, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0444\u0430\u0439\u043b\u0430\u0445, \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u043d\u044c\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043f\u043e\u043b\u044f _ulMiniSectorCutoff.<\/p>\n<pre><code class=\"delphi\">procedure TPoifsFile.ComposeMiniFat; var   I, CurrChain: Integer;   TmpPosition: int64; begin   \/\/ \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u043c\u0438\u043d\u0438\u0444\u0430\u0442\u0430   CurrChain := FHeader._sectMiniFatStart;     \/\/ \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u044c (\u0442\u0430\u043a-\u0436\u0435 \u0438\u0434\u0435\u0442 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043f\u043e 128 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432)   SetLength(FMiniFat, FHeader._csectMiniFat * 128);     I := 0;   while Integer(CurrChain) &gt;= 0 do   begin     \/\/ \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0444\u0444\u0441\u0435\u0442 \u0441\u0435\u043a\u0442\u043e\u0440\u0430     TmpPosition := GetBlockOffset(CurrChain);       \/\/ \u0435\u0441\u043b\u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u0437\u043d\u0430\u0447\u0438\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c     if TmpPosition &lt; 0 then Exit;     \/\/if TmpPosition &gt; FStream.Size then Exit;       FStream.Position := TmpPosition;       \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f     FStream.ReadBuffer(FMiniFat[I], 512 {128 * SizeOf(DWORD)});     Inc(I, 128);       \/\/ \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0437 FAT     CurrChain := FFat[CurrChain];   end; end; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043f\u0430\u043f\u043e\u043a.<\/p>\n<p>  \u041e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440:<\/p>\n<pre><code class=\"delphi\">TPoifsProperty = packed record \/\/ 128 length   \/\/ \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430\/\u043f\u0430\u043f\u043a\u0438   Caption: array[0..31] of WChar;   \/\/ \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u043c\u0435\u043d\u0438   CaptionSize: Word;   \/\/ \u0442\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 STGTY_\u0425\u0425\u0425   PropertyType: Byte;   \/\/ \u0446\u0432\u0435\u0442 \u0443\u0437\u043b\u0430 (\u043c\u0430\u0441\u0441\u0438\u0432 TPoifsProperty \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f Red-Black-Tree)   NodeColor: Byte; \/\/ 0 (red) or 1 (black)   \/\/ \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435   PreviousProp: Integer;   \/\/ \u043d\u043e\u043c\u0435\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435   NextProp: Integer;   \/\/ \u043d\u043e\u043c\u0435\u0440 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435   ChildProp: Integer;   Reserved1: TGUID;   UserFlags: DWORD;   \/\/ \u0432\u0440\u0435\u043c\u044f   ATime: array [0..1] of Int64;   \/\/ \u043d\u043e\u043c\u0435\u0440 \u044f\u0447\u0435\u0439\u043a\u0438 FAT \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0431\u043b\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430   StartBlock: Integer;   \/\/ \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430   Size: Integer;   Reserved2: DWORD; end;   TPoifsPropsBlock = array[0..3] of TPoifsProperty; <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410 \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0445 \u0431\u0443\u0434\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function TPoifsFile.ReadPropsArray: Boolean; var   I, J, Len: Integer;   PropsBlock: TPoifsPropsBlock; begin   Result := True;     \/\/ \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432   Len := 0;     \/\/ \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f Property Set Storage   J := FHeader._sectDirStart;     repeat       \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043f\u043e 4 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430     Inc(Len, 4);     SetLength(FPropsArray, Len);       PropsBlock := TPoifsPropsBlock(GetBlock(J));       for I := 0 to 3 do       FPropsArray[Len - 4 + I] := PropsBlock[I];       \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u0437 FAT     J := FFat[J];     until J = ENDOFCHAIN; end; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445:  <\/p>\n<ol>\n<li>\u043c\u0430\u0441\u0441\u0438\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 FAT, \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043d\u043e\u043c\u0435\u0440 \u0441\u0435\u043a\u0446\u0438\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/li>\n<li>\u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435<\/li>\n<li>\u043c\u0430\u0441\u0441\u0438\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 MiniFAT<\/li>\n<li>\u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432<\/li>\n<\/ol>\n<p>  \u0427\u0442\u043e \u0435\u0441\u0442\u044c FAT \u0438 MiniFAT?<br \/>  \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c FHeader._uSectorShift, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043b\u0435\u0436\u0438\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435.<br \/>  FAT \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u044d\u0442\u0438\u0445 \u0441\u0435\u043a\u0442\u043e\u0440\u0430\u0445 (\u043a\u0430\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432, \u0442\u0430\u043a \u0438 \u0441\u0443\u0433\u0443\u0431\u043e \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e).<br \/>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0435\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0444\u0430\u0439\u043b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 1 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442, \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e 2048 \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 512 \u0431\u0430\u0439\u0442 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e).<br \/>  \u0418\u0437-\u0437\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u0434\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438, \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 10 \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u043a\u043e\u043d\u0435\u0446 \u0444\u0430\u0439\u043b\u0430, \u0430 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u2014 \u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u043e.<br \/>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0437\u0430 \u0447\u0435\u043c \u0438\u0434\u0435\u0442 (\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438) \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043a FAT \u0438 \u043f\u043e\u043b\u044e StartBlock \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b TPoifsProperty, \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u043f\u043e\u0439\u043c\u0435\u043c, \u043a\u0430\u043a\u043e\u0439 \u0441\u0435\u043a\u0442\u043e\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0447\u0430\u043b\u043e \u0431\u043b\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0433\u0434\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 (\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0432\u0448\u0438\u0441\u044c \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 FAT).<br \/>  \u041f\u0440\u0438\u0447\u0435\u043c \u0441 \u043c\u0438\u043d\u0438\u0444\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435, \u0442\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u043b\u0435\u043a\u0441\u044f.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. \u0412\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 TPoifsProperty, \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u043b\u0435\u0439 PreviousProp, NextProp \u0438 ChildProp, \u0430 \u0442\u0430\u043a\u0436\u0435 NodeColor. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 Red-Black-Tree.<br \/>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437 \u043d\u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0430\u043f\u043e\u043a \u0438 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0435\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c, \u0442\u043e\u0433\u0434\u0430 \u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/551\/c12\/d6c\/551c12d6c81e4f8095d870e571578913.png\"\/><\/div>\n<p>  \u0421\u0443\u0442\u044c \u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043f\u0430\u043f\u043e\u043a (\u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0432 \u0435\u0435 \u0432 TreeView), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u0442 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u043f\u0430\u043f\u043e\u043a \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438 \u0432\u044b\u0442\u0430\u0449\u0438\u0442 \u0442\u0443\u0434\u0430 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0437 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0432 \u043f\u044f\u0442\u044c \u044d\u0442\u0430\u043f\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0432\u0438\u0434\u043d\u044b \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 Extract:<\/p>\n<pre><code class=\"delphi\">begin   FileStream := TFileStream.Create(edSrc.Text, fmOpenReadWrite);   try     AFile := TPoifsFile.Create(FileStream);     try       \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430       AFile.LoadFromStream;         ATree := TStorageTree.Create;       try         \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0443\u0437\u043b\u044b         for I := 0 to AFile.PropertiesCount - 1 do           ATree.AddNode(I).Data := AFile[I];           \/\/ \u0441\u0442\u0440\u043e\u0438\u043c \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438         FillAllChilds(0, ATree.GetNode(0).Data.ChildProp);           \/\/ \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0432\u0432\u0438\u0434\u0435 \u0434\u0435\u0440\u0435\u0432\u0430         TreeView1.Items.Clear;         FillTree(nil, 0);           \/\/ \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435         DebugLog := TStringList.Create;         try           Extract(IncludeTrailingPathDelimiter(edDst.Text), 0);           if DebugLog.Count &gt; 0 then             DebugLog.SaveToFile(IncludeTrailingPathDelimiter(edDst.Text) + 'cannotread.log');         finally           DebugLog.Free;         end;       finally         ATree.Free;       end;       finally       AFile.Free;     end;   finally     FileStream.Free;   end; end; <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f (\u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430) \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d.<br \/>  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443 \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u043c\u0443.<\/p>\n<p>  \u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0443\u0434\u0440\u0438\u0442\u044c \u0438 \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0435\u0440\u0435\u0432\u0430 \u0432\u0437\u044f\u043b \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444.<\/p>\n<p>  \u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c N \u0443\u0437\u043b\u043e\u0432 \u043a \u0433\u0440\u0430\u0444\u0443, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 TPoifsProperty (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0432 \u043a\u043e\u0434\u0435, \u0431\u043b\u043e\u043a \u00ab\u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0443\u0437\u043b\u044b\u00bb).<br \/>  \u0410 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438, \u043a\u0442\u043e \u0438 \u043d\u0430 \u0447\u0442\u043e \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 \u0441\u0430\u043c\u043e \u0434\u0435\u0440\u0435\u0432\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b:<\/p>\n<ul>\n<li>TPoifsProperty.ChildProp \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435 (\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u043f\u0430\u043f\u043e\u043a)<\/li>\n<li>TPoifsProperty.PreviousProp \u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0438.<\/li>\n<li>TPoifsProperty.NextProp \u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0438.<\/li>\n<\/ul>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u0435\u0435 \u0432\u043e\u0442 \u0432\u0430\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/d5b\/756\/172\/d5b756172453470992785724e4a1d49e.png\"\/><\/div>\n<p>  \u0421\u0442\u0440\u0435\u043b\u043a\u0430 \u0432\u043d\u0438\u0437, \u044d\u0442\u043e ChildProp, \u0432\u043f\u0440\u0430\u0432\u043e \u2014 NextProp, \u0432\u043b\u0435\u0432\u043e \u2014 PreviousProp.<br \/>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0432 \u043a\u043e\u0440\u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430 \u0438 \u043e\u0434\u043d\u0430 \u043f\u0430\u043f\u043a\u0430, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0435\u0449\u0435 \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0440\u0435\u0442\u0438\u0439 \u044d\u0442\u0430\u043f, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043e\u043a \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438 \u0433\u0440\u0430\u0444\u0430.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">var   ATree: TStorageTree; ...     procedure FillAllChilds(RootIndex, CurrentIndex: Integer);   var     SubChildIndex: Integer;     RootNode, CurrNode, ChildNode: TStorageElement;   begin       if CurrentIndex &lt; 0 then Exit;       \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0443\u0442\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b     RootNode := ATree.GetNode(RootIndex);       \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0432 \u043d\u0435\u0433\u043e \u0443\u0437\u0435\u043b     CurrNode := ATree.GetNode(CurrentIndex);       if CurrNode = nil then Exit;           \/\/ \u0435\u0441\u043b\u0438 \u0443\u0437\u0435\u043b \u0443\u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d - \u0432\u044b\u0445\u043e\u0434\u0438\u043c     if CurrNode.Added then Exit;     CurrNode.Added := True;       \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043d\u0435\u0433\u043e \u043e\u0442 \u0440\u0443\u0442\u0430     ATree.AddVector(RootNode, CurrNode);     \/\/ \u0438 \u0443 \u0432\u043d\u043e\u0432\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u0447\u0430\u0439\u043b\u0434\u043e\u0432     FillAllChilds(CurrNode.ID, CurrNode.Data.ChildProp);       \/\/ \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0441\u0442\u044c \u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0443\u0437\u043b\u043e\u043c \u0435\u0449\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b     SubChildIndex := CurrNode.Data.PreviousProp;     while SubChildIndex &gt;= 0 do     begin       \/\/ \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0445 \u043a \u0440\u0443\u0442\u0443       FillAllChilds(RootIndex, SubChildIndex);       ChildNode := ATree.GetNode(SubChildIndex);       if ChildNode &lt;&gt; nil then         SubChildIndex := ChildNode.Data.PreviousProp       else         SubChildIndex := -1;     end;       \/\/ \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430     SubChildIndex := CurrNode.Data.NextProp;     while SubChildIndex &gt;= 0 do     begin       FillAllChilds(RootIndex, SubChildIndex);       ChildNode := ATree.GetNode(SubChildIndex);       if ChildNode &lt;&gt; nil then         SubChildIndex := ChildNode.Data.NextProp       else         SubChildIndex := -1;     end;   end; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u043b\u0430\u0441\u0441\u0430 \u0433\u0440\u0430\u0444\u0430, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u043c TStorageTree \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0442\u0435\u043c\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"http:\/\/rouse.drkb.ru\/blog\/storage.zip\">\u043f\u043e\u0442\u043e\u043c \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445<\/a>.<br \/>  \u0421\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434 GetNode, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \u0433\u0440\u0430\u0444\u0430 \u043f\u043e \u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 (\u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 TPoifsProperty, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0438\u043c \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Data) \u0438 \u043c\u0435\u0442\u043e\u0434 AddVector, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0441\u0441\u044b\u043b\u043a\u0443 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0443\u0437\u043b\u0430\u043c\u0438 \u0433\u0440\u0430\u0444\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u0435\u043f\u0435\u0440\u044c \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439 \u044d\u0442\u0430\u043f \u2014 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0433\u0440\u0430\u0444\u0430 \u0441\u0442\u0440\u043e\u0438\u043c \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0430\u043f\u043e\u043a \u0438 \u0444\u0430\u0439\u043b\u043e\u0432.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure FillTree(Node: TTreeNode; RootNodeIndex: Integer); var   W: WideString;   TreeNode: TTreeNode;   I: Integer;   RootStorageNode, ChildStorageNode: TStorageElement; begin   \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u0437\u0435\u043b \u0433\u0440\u0430\u0444\u0430   RootStorageNode := ATree.GetNode(RootNodeIndex);   \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 \u0434\u0435\u0440\u0435\u0432\u043e (\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u0438\u043c\u044f \u0438 \u0438\u043a\u043e\u043d\u043a\u0443)   W := RootStorageNode.Data.Caption;   TreeNode := TreeView1.Items.AddChildFirst(Node, W);   case RootStorageNode.Data.PropertyType of     STGTY_STORAGE: TreeNode.ImageIndex := 0;     STGTY_STREAM: TreeNode.ImageIndex := 1;   end;   \/\/ \u0431\u0435\u0436\u0438\u043c \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u043e\u0442 \u0443\u0437\u043b\u0430   for I := 0 to RootStorageNode.VectorCount - 1 do   begin     \/\/ \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043b\u0438\u043d\u043a \u043d\u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u0443\u0437\u0435\u043b (\u0430 \u0432\u0434\u0440\u0443\u0433 \u043c\u044b \u043f\u0430\u043f\u043a\u0430?)     ChildStorageNode := TStorageElement(RootStorageNode.GetVector(I).SlaveNode);     if ChildStorageNode = nil then       Continue;     \/\/ \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430, \u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0435 \u043d\u0430 \u043f\u0430\u043f\u043a\u0443 \u0432\u044b\u0448\u0435, \u0442\u043e \u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e     if ChildStorageNode.ID &lt;&gt; RootNodeIndex then       FillTree(TreeNode, ChildStorageNode.ID);   end; end; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0411\u0430\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f.<br \/>  \u0413\u0440\u0443\u0431\u043e \u0431\u0435\u0436\u0438\u043c \u043f\u043e \u0443\u0437\u043b\u0430\u043c \u0433\u0440\u0430\u0444\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u043a\u043e\u0440\u043d\u044f, \u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b (\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u0438\u0437 \u0440\u0435\u0431\u0435\u0440 \u0433\u0440\u0430\u0444\u0430 GetVector(I).SlaveNode) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0435.<\/p>\n<p>  \u0421\u043f\u0440\u043e\u0441\u0438\u0442\u0435, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0430 \u00abRed-Black-Tree\u00bb \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043f\u043e\u043b\u044f NodeColor?<br \/>  \u0410 \u0448\u0443\u0442 \u0435\u0433\u043e \u0437\u043d\u0430\u0435\u0442. \u042f \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0438\u0441\u0430\u043b \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u0438 \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0437\u043e\u043b\u043e\u0442\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e: \u00ab\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u2014 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0439 \u0442\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e\u00bb. \ud83d\ude42<\/p>\n<p>  \u0418 \u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a \u043f\u044f\u0442\u043e\u043c\u0443 \u044d\u0442\u0430\u043f\u0443 \u2014 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043f\u0430\u043f\u043a\u0443.<br \/>  \u041d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u044f\u0441\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u2014 \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441 \u0444\u0430\u0439\u043b\u043e\u043c.<\/p>\n<p>  \u041f\u043e\u043c\u043d\u0438\u0442\u0435 \u0447\u0442\u043e \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u043f\u0440\u043e \u0441\u0435\u043a\u0446\u0438\u044e FAT \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u0434\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0441\u0435\u043a\u0446\u0438\u0439, \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 FAT.<\/p>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u00ab\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u00bb (\u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u0435\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u043c\u0443\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 _ulMiniSectorCutoff \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430):<\/p>\n<pre><code class=\"delphi\">procedure TPoifsFile.GetDataFromStream(ChainStart: ULONG;   NeedLength: DWORD; const Stream: TStream); begin   Stream.Size := 0;   while (Integer(ChainStart) &gt;= 0) and (Stream.Size &lt; NeedLength) do   begin     \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0440\u0438\u043c\u0430     FStream.Position := GetBlockOffset(ChainStart);       \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u0435\u043a\u0442\u043e\u0440     ChainStart := FFat[ChainStart];       \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445     Stream.CopyFrom(FStream, FHeader._uSectorShift);   end;   \/\/ \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0430\u0432\u043a\u0430   if Stream.Size &gt; NeedLength then     Stream.Size := NeedLength; end; <\/code><\/pre>\n<p>  \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0430\u0432\u043a\u0430 \u043d\u0443\u0436\u043d\u0430 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0435\u043a\u0442\u043e\u0440\u0430\u0445 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0430\u043c\u0438, \u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u0440\u0430\u0442\u0435\u043d \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0443.<br \/>  \u0421\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0440\u0430\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u0430\u0432\u043a\u0443, \u043d\u043e \u2014 \u043e\u043d\u043e \u043c\u043d\u0435 \u043d\u0430\u0434\u043e? \ud83d\ude42<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043f\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c, \u043d\u0430\u0441 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 ChainStart, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f StartBlock \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b TPoifsProperty.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0447\u0435\u043c _ulMiniSectorCutoff.<\/p>\n<pre><code class=\"delphi\">procedure TPoifsFile.GetDataFromMiniStream(ChainStart: ULONG;   NeedLength: DWORD; const Stream: TStream); var   MiniStreamOffset: DWORD;   RealMiniStreamSector, TmpChain: Integer; begin   Stream.Size := 0;   while (Integer(ChainStart) &gt;= 0) and (Stream.Size &lt; NeedLength) do   begin     \/\/ \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u043a\u0430\u043a\u043e\u043c \u0441\u0435\u043a\u0442\u043e\u0440\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0439 Ministream     TmpChain := ChainStart;     RealMiniStreamSector := Properties[0].StartBlock;     while TmpChain &gt;= 8 do     begin       Dec(TmpChain, 8);       RealMiniStreamSector := FFat[RealMiniStreamSector];     end;     \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u0435\u043a\u0442\u043e\u0440\u0430     MiniStreamOffset := GetBlockOffset(RealMiniStreamSector);       \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u043c\u0430     FStream.Position := MiniStreamOffset +       (ChainStart mod 8) * FHeader._uMiniSectorShift;       \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u043b\u043e\u043a \u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u043c\u0430     ChainStart := FMiniFat[ChainStart];       \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445     Stream.CopyFrom(FStream, FHeader._uMiniSectorShift);   end;   \/\/ \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0430\u0432\u043a\u0430   if Stream.Size &gt; NeedLength then     Stream.Size := NeedLength; end; <\/code><\/pre>\n<p>  \u041d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u0445\u0438\u0442\u0440\u0435\u0435, \u0434\u0430?<br \/>  \u041f\u0440\u0430\u0432\u0434\u0430, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u043c \u043e\u0444\u0441\u0435\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 TmpChain \u0438 \u0442\u043e\u0442 \u0436\u0435 FAT. \u0415\u0441\u043b\u0438 \u0441\u0435\u043a\u0442\u043e\u0440 \u0432\u044b\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0434\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043d\u043e\u0433\u043e (\u0432\u043e\u0441\u044c\u043c\u0435\u0440\u043a\u0443) \u0442\u043e \u0438\u0434\u0435\u043c \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 FAT \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0440\u0443\u0442\u0430, \u043f\u043e\u043a\u0430 TmpChain \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438\u0431\u043e \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043c\u0438\u043d\u0438\u0444\u0430\u0442 \u043b\u0435\u0436\u0438\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0440\u0443\u0442\u0435.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043b\u044e\u0431\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0443\u043a\u0430\u0436\u0435\u043c:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure GetStorageData(ANode: TStorageElement; const Stream: TStream); begin   if ANode.Data.Size &lt; Integer(AFile.Header._ulMiniSectorCutoff) then     AFile.GetDataFromMiniStream(ANode.Data.StartBlock, ANode.Data.Size, Stream)   else     AFile.GetDataFromStream(ANode.Data.StartBlock, ANode.Data.Size, Stream); end; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u0437\u0435\u043b \u0433\u0440\u0430\u0444\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u043f\u0430\u043f\u043a\u0443, \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435, \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u044f\u0442\u044b\u0439 \u044d\u0442\u0430\u043f \u2014 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0432\u0441\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u043f\u0430\u043f\u043a\u0443.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure Extract(Path: string; RootNodeIndex: Integer); var   W: WideString;   I: Integer;   RootStorageNode, ChildStorageNode: TStorageElement;   F: TFileStream; begin   RootStorageNode := ATree.GetNode(RootNodeIndex);   W := RootStorageNode.Data.Caption;   case RootStorageNode.Data.PropertyType of     STGTY_STORAGE:       Path := Path + W + '\\';     STGTY_STREAM:     begin       try         ForceDirectories(Path);         F := TFileStream.Create(Path + W, fmCreate);         try           GetStorageData(RootStorageNode, F);         finally           F.Free;         end;       except         DebugLog.Add(Path + W);       end;     end;   end;   for I := 0 to RootStorageNode.VectorCount - 1 do   begin     ChildStorageNode := TStorageElement(RootStorageNode.GetVector(I).SlaveNode);     if ChildStorageNode = nil then       Continue;     if ChildStorageNode.ID &lt;&gt; RootNodeIndex then       Extract(Path, ChildStorageNode.ID);   end; end; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0443, \u0437\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u0431\u0435\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432. \u0412\u0441\u0435 \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043d\u0430\u0442\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u043e\u0440\u0434\u043e\u0432\u0441\u043a\u0438\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/e39\/d39\/7f5\/e39d397f57094649a9eb139d5b5c2c50.png\"\/><\/div>\n<p>  \u0410 \u0432 \u043f\u0430\u043f\u043e\u0447\u043a\u0435, \u043a\u0443\u0434\u0430 \u043c\u044b \u044d\u0442\u043e \u0432\u0441\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u043b\u0438, \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/fe4\/4c3\/fe1\/fe44c3fe169c4337bfca0820aeb3a009.png\"\/><\/div>\n<p>  \u041d\u0435 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b, \u0434\u0430?<br \/>  \u041d\u0443, \u0442\u0443\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435\u0441\u044c \u043a \u0438\u043c\u0435\u043d\u0430\u043c \u0432 \u0434\u0435\u0440\u0435\u0432\u0435, \u0442\u0430\u043c \u0432\u0438\u0434\u043d\u044b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0447\u0435\u0440\u0442\u043e\u0447\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 &quot;|&quot; \u043f\u0435\u0440\u0435\u0434 \u0438\u043c\u0435\u043d\u0435\u043c \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u043f\u0435\u0440\u0435\u0434 \u00abCompObj\u00bb.<\/p>\n<p>  \u042d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u0435 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434 OLE \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0435\u0449\u0435 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 (\u043e\u0442 0 \u0434\u043e 0x1F). \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 \u0432 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u044f \u043d\u0435 \u043c\u043e\u0433\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b, \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043b\u043e\u0433: \u00abcannotread.log\u00bb.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e \u0434\u043b\u044f \u0434\u0435\u043c\u043a\u0438 \u043f\u043e\u0439\u0434\u0435\u0442 \u0438 \u0442\u0430\u043a.<\/p>\n<p>  \u041a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432 \u0430\u0440\u0445\u0438\u0432\u0435 <a href=\"http:\/\/rouse.drkb.ru\/blog\/storage.zip\">\u0432 \u043f\u0430\u043f\u043a\u0435 &quot;..\\RawStorageReader\\&quot;.<\/a><\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0437\u0430\u0447\u0435\u043c \u043c\u044b \u044d\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438?<br \/>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b: &quot;..\\corrupted\\corrupted_storage.bin&quot;<\/p>\n<p>  \u0411\u0443\u0434\u0435\u0442 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/160\/68b\/d9a\/16068bd9ad934cbfad5aa1d5b9994fa4.png\"\/><\/div>\n<p>  \u041e \u043a\u0430\u043a, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u043e\u0433\u0434\u0430 \u0440\u0438\u0434\u0435\u0440\u043e\u043c \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u044b, \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0447\u0435\u0440\u0435\u0437 API:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/b2a\/106\/95a\/b2a10695a2ce4358bad762606321af62.png\"\/><\/div>\n<p>  \u041f\u0435\u0447\u0430\u043b\u044c, \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0437\u0430 \u0431\u0435\u0434\u0430, \u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0443\u0436\u0435 \u0432 RAW \u0440\u0435\u0436\u0438\u043c\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/4cd\/70e\/ca8\/4cd70eca8fe94d79a951d4a24e62460e.png\"\/><\/div>\n<p>  \u0410\u0433\u0430, \u043e\u0448\u0438\u0431\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u044f, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0442\u0435\u043a:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/e71\/7ab\/4c1\/e717ab4c1bd64107a6887af553901001.png\"\/><\/div>\n<p>  \u041e\u0448\u0438\u0431\u043a\u0430 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c ReadBuffer \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 GetBlock. <br \/>  \u0411\u0443\u0434\u0435\u043c \u0440\u0435\u0448\u0430\u0442\u044c.<\/p>\n<h4>6. \u041f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0447\u0438\u0442\u0430\u0435\u043c \u0432\u0441\u0435 \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e.<\/h4>\n<p>  \u0415\u0449\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u043e \u0446\u0435\u043b\u043e\u0439 \u043a\u043e\u0433\u043e\u0440\u0442\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u00ab\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u0435\u043b\u0435\u0439\u00bb \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0442 Word. \u0421\u0435\u0439\u0447\u0430\u0441 \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u043d\u0438\u0445. \ud83d\ude42<\/p>\n<p>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445.<\/p>\n<ul>\n<li>\u043e\u043d\u0438 \u0437\u043d\u0430\u044e\u0442 \u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/li>\n<li>\u043e\u043d\u0438 \u0437\u043d\u0430\u044e\u0442 \u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Word \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0432\u043e\u0438\u0445 \u0441\u0442\u0440\u0438\u043c\u0430\u0445.<\/li>\n<\/ul>\n<p>  \u042f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043f\u0443\u043d\u043a\u0442\u0435, \u0434\u0430 \u0438 \u043d\u0435 \u043d\u0430\u0434\u043e \u043e\u043d\u043e \u043c\u043d\u0435, \u0430 \u0432\u043e\u0442 \u043e \u043f\u0435\u0440\u0432\u043e\u043c, \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u043f\u044f\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u044b, \u0432\u044b \u0438 \u0441\u0430\u043c\u0438 \u0437\u043d\u0430\u0435\u0442\u0435. \ud83d\ude42<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0447\u0435\u0442\u044b\u0440\u0435:<\/p>\n<ul>\n<li>\u0443\u0431\u0438\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d \u043d\u0443\u043b\u044f\u043c\u0438)<\/li>\n<li>\u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d FAT<\/li>\n<li>\u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 TPoifsProperty<\/li>\n<li>\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0441\u0435\u043a\u0442\u043e\u0440\u0430\u0445<\/li>\n<\/ul>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435 \u2014 \u043d\u0435 \u043b\u0435\u0447\u0438\u0442\u0441\u044f. \u041d\u0435\u0442, \u043d\u0443 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0430\u0439\u0434\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0439 \u0444\u0430\u043d\u0430\u0442 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f FAT, \u043d\u043e \u044f \u0442\u0430\u043a\u0438\u0445 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0435 \u2014 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u043b\u0435\u0447\u0438\u0442\u0441\u044f.<br \/>  \u0417\u043d\u0430\u044f, \u0447\u0442\u043e FAT \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0443\u0441\u043b\u043e\u0432\u0438\u044e: \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 ENDOFCHAIN (-2) \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 FAT \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<br \/>  \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0431\u043e\u0439\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 ENDOFCHAIN, \u043d\u043e, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0441\u0435\u043a\u0442\u043e\u0440 \u043c\u0438\u043d\u0438\u0444\u0430\u0442 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e, \u0434\u0430 \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e (\u0438 \u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0432\u0435\u0437\u0435\u0442).<\/p>\n<p>  \u0422\u0440\u0435\u0442\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043b\u0435\u0447\u0438\u0442\u0441\u044f.<br \/>  \u0413\u0440\u0443\u0431\u043e, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u0434\u0440\u0435\u0441 \u044f\u0447\u0435\u0439\u043a\u0438 FAT, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0435\u043a\u0442\u043e\u0440\u0430, \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 ENDOFCHAIN. \u042d\u0442\u0438\u043c \u043c\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043e\u0442\u0440\u0435\u0437\u0430\u0435\u043c \u043a\u0443\u0441\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 (\u0432 99 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0443\u0431\u0438\u0442\u044b\u0445), \u043d\u043e \u0437\u0430\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e.<\/p>\n<p>  \u0427\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435 \u043b\u0435\u0447\u0438\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443, \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u0442, \u043d\u043e \u043e\u043d \u0438\u0445 \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442 (\u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u2014 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435).<\/p>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c:<br \/>  \u041f\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u0441\u0431\u043e\u0439\u043d\u043e\u0433\u043e FAT \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e.<br \/>  \u0417\u043d\u0430\u044f \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 RAW \u0440\u0435\u0436\u0438\u043c\u0435, \u043d\u0430\u043c \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0447\u0442\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"delphi\">function TPoifsFile.GetBlock(Adress: Integer): TPoifsBlock; var   BlockOffset: Integer; begin   BlockOffset := GetBlockOffset(Adress);   if BlockOffset &lt; FStream.Size then   begin     FStream.Position := BlockOffset;     FStream.ReadBuffer(Result, SizeOf(TPoifsBlock));   end   else     raise Exception.Create('Wrong block offset at addres: ' + IntToStr(Adress)); end; <\/code><\/pre>\n<p>  \u041f\u0443\u0441\u0442\u044c \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043e\u0444\u0444\u0441\u0435\u0442\u044b \u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0441\u0440\u043e\u0441\u043b\u043e\u0441\u044c.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 ReadPropsArray, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 FAT \u043c\u0430\u0441\u0441\u0438\u0432\u0430:<\/p>\n<pre><code class=\"delphi\">function TPoifsFile.ReadPropsArray: Boolean; var   I, J, Len, LastGood: Integer;   PropsBlock: TPoifsPropsBlock; begin   Result := True;     \/\/ \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432   Len := 0;     \/\/ \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f Property Set Storage   J := FHeader._sectDirStart;     LastGood := J;     repeat       if J = FREESECT then     begin       FixFatEntry(LastGood, ENDOFCHAIN);       Break;     end;       \/\/ \u0447\u0438\u0442\u0430\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043f\u043e 4 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430     Inc(Len, 4);     SetLength(FPropsArray, Len);       \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u0430\u0432\u043a\u043e\u0439     try       PropsBlock := TPoifsPropsBlock(GetBlock(J));     except       FixFatEntry(LastGood, ENDOFCHAIN);       Break;     end;       for I := 0 to 3 do       FPropsArray[Len - 4 + I] := PropsBlock[I];       LastGood := J;       \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u043d\u043e\u043c\u0435\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u0437 FAT     J := FFat[J];       if J &lt; ENDOFCHAIN then     begin       FixFatEntry(LastGood, ENDOFCHAIN);       Break;     end;     until J = ENDOFCHAIN; end; <\/code><\/pre>\n<p>  \u041d\u0443 \u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 FixFatEntry:<\/p>\n<pre><code class=\"delphi\">procedure TPoifsFile.FixFatEntry(FatIndex, NewValue: Integer); var   J, Offset: Integer; begin   \/\/ \u0418\u0449\u0435\u043c \u043e\u0444\u0444\u0441\u0435\u0442 \u0432 FAT \u0446\u0435\u043f\u043e\u0447\u043a\u0435   J := FatIndex mod 128;   Offset := FFatOffset[FatIndex] + J * 4;     \/\/ \u0438 \u043f\u0438\u0448\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0431\u043e\u0439\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0435   FStream.Position := Offset;   FStream.WriteBuffer(NewValue, SizeOf(Integer)); end; <\/code><\/pre>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043d\u0435\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f FAT \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/775\/5a5\/3b2\/7755a53b2382447fa434b04d46b76f32.png\"\/><\/div>\n<p>  \u0411\u0430\u2026 \u0434\u0430 \u0442\u0430\u043c \u0446\u0435\u043b\u0430\u044f \u043a\u0443\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \ud83d\ude42<br \/>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u043e\u043b\u043e\u043c\u0430\u043d\u044b, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043c\u044b \u0432\u044b\u0442\u0430\u0449\u0438\u043b\u0438.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435, \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0438, \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 FixFatEntry \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 FStream.WriteBuffer.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0430\u0432\u043a\u0438, \u0447\u0442\u043e \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u044b, \u0447\u0442\u043e \u0438\u0437 \u0442\u0440\u0435\u0442\u044c\u0435\u0439, \u043e\u0442\u043a\u0440\u043e\u044e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b, \u043d\u043e \u0441\u043a\u0430\u0436\u0443\u0442 \u0447\u0442\u043e \u043e\u043d \u043f\u0443\u0441\u0442, \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0442 \u0437\u0430\u043a\u0430\u0432\u044b\u043a\u0430.<\/p>\n<p>  \u041d\u043e \u0437\u0430\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0435\u0441\u044c \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \ud83d\ude42<\/p>\n<p>  \u041a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u0432 \u0430\u0440\u0445\u0438\u0432\u0435 <a href=\"http:\/\/rouse.drkb.ru\/blog\/storage.zip\">\u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u044e\u0449\u0435\u043c\u0443 \u043f\u0443\u0442\u0438: &quot;..\\RawStorageReader\\PoifsWithRepair.pas&quot;<\/a>.<\/p>\n<p>  \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043a\u0440\u0443\u0433\u043b\u044f\u0442\u044c\u0441\u044f.<\/p>\n<h4>7. \u0412\u044b\u0432\u043e\u0434\u044b \u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430<\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e \u2014 \u044f \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0431\u043e\u044e\u0441\u044c, \u0447\u0442\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u044f \u0432\u0430\u0441 \u043e\u0442\u0442\u043e\u043b\u043a\u043d\u0443\u043b \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438.<\/p>\n<p>  \u0412\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0439, \u0441\u0430\u043c\u043e\u0439 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u2014 \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e, \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b <b>\u043e\u0434\u043d\u0430\u0436\u0434\u044b <\/b>(\u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430, \u043d\u043e) \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d.<\/p>\n<p>  \u0420\u0430\u0437\u0440\u0443\u0448\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c\u0441\u044f.<br \/>  \u041a\u0430\u043a \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044e\u0442 \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e?<br \/>  \u0415\u0441\u043b\u0438 \u0441\u043a\u0430\u0436\u0435\u0442\u0435 \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u043e, \u0432\u043e\u0437\u0440\u0430\u0436\u0443, \u0434\u0430 \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0443 \u043d\u0438\u0445 \u043e\u0434\u0438\u043d \u2014 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0432\u044b\u0442\u0430\u0449\u0443 \u0444\u043b\u044d\u0448\u043a\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \ud83d\ude42<\/p>\n<p>  \u0425\u043e\u0442\u044f, \u0434\u0430\u0432\u0430\u0439\u0442\u0435, \u044f \u0432\u0430\u043c \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438:<br \/>  \u0412\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043e\u043f\u0438\u0441\u0430\u043b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u0435\u0434\u0438\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<br \/>  \u042d\u0442\u043e \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u043c\u043d\u043e\u0439 \u0431\u0430\u0437\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 (\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u044b\u0445) \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p>  \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b, \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u0435\u043b\u0438.<\/p>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430:<br \/>  \u0417\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 8 \u0441 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u0439 \u043b\u0435\u0442 (\u0441\u043a\u0430\u0436\u0435\u043c, \u0434\u0430\u0442\u0430 \u043e\u0442\u0441\u0447\u0435\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 RAW \u0440\u0435\u0436\u0438\u043c\u0435) \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0432 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0440\u043e\u0432\u043d\u043e 473 \u0444\u0430\u0439\u043b\u0430 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u043d\u044b\u0445 \u0431\u0430\u0437, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438 \u043d\u0430\u043c \u043d\u0430\u0448\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438.<br \/>  \u0415\u0441\u043b\u0438 \u0431\u0440\u0430\u0442\u044c \u0437\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0442\u043e\u0433\u0434\u0430 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441, \u0438 \u043e\u0441\u0440\u0435\u0434\u043d\u0438\u0442\u044c \u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0433\u0440\u0443\u0431\u043e 150 \u0442\u044b\u0441\u044f\u0447 \u0441\u0442\u0430\u043d\u0446\u0438\u0439, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0448\u0435 \u041f\u041e.<br \/>  \u0412 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 24 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439, \u0435\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u043e \u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 12 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0433\u043e\u0434.<br \/>  \u0421\u0447\u0438\u0442\u0430\u0435\u043c: 150000 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 * 24 \u0434\u043d\u044f * 12 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 * 8 \u043b\u0435\u0442 = 345 \u0441 \u043a\u043e\u043f\u0435\u0439\u043a\u0430\u043c\u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 (\u0443\u0441\u0440\u0435\u0434\u043d\u0435\u043d\u043d\u043e\u0435).<\/p>\n<p>  \u041f\u043e \u0444\u0430\u043a\u0442\u0443, \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u044f \u0438\u043c\u0435\u044e \u0440\u043e\u0432\u043d\u043e 473 \u00ab\u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044b\u0445\u00bb \u0444\u0430\u0439\u043b\u0430 (\u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 1-2 \u0432 \u043c\u0435\u0441\u044f\u0446, \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u0435\u0441\u044f\u0446\u0430\u043c\u0438 \u0437\u0430\u0442\u0438\u0448\u044c\u0435). \u0418\u0437 \u043d\u0438\u0445 (\u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c), \u043e\u043a\u043e\u043b\u043e \u0441\u043e\u0442\u043d\u0438 \u0431\u044b\u043b\u0438 \u0441 \u0431\u0438\u0442\u044b\u043c FAT (\u0430 \u043a\u0430\u043a \u044f \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u2014 \u0431\u0438\u0442\u044b\u0439 \u0444\u0430\u0442, \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043b\u043e\u0445\u043e).<br \/>  \u0422\u0430\u043a \u0432\u043e\u0442, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u044f \u044d\u0442\u0430 \u0441\u043e\u0442\u043d\u044f \u0431\u0438\u0442\u044b\u0445 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 FAT-\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u2014 \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u043e\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 UnErase \u0438 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438: \u043c\u043e\u043b \u0447\u0442\u043e \u0441 \u043d\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c? <br \/>  \u0410 \u0441 \u043d\u0438\u043c\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0436\u0435 \u043d\u0435\u0447\u0435\u0433\u043e \u2014 \u043d\u0435 \u043c\u044b \u0443\u0434\u0430\u043b\u044f\u043b\u0438, \u043d\u0435 \u043d\u0430\u043c \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043e\u0442\u043a\u0438\u043d\u0443\u0432 \u044d\u0442\u0443 \u0441\u043e\u0442\u043d\u044e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c: \u043a\u0430\u043a\u043e\u0432 \u0448\u0430\u043d\u0441 \u043f\u043e\u043b\u043e\u043c\u043a\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430?<br \/>  \u0414\u0430 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c 1 \u043a \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0443 \u2014 CD \u043f\u0440\u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0447\u0430\u0449\u0435 \u0441\u0431\u043e\u0438\u0442\u044c \u0431\u0443\u0434\u0435\u0442, \u0447\u0435\u043c \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \ud83d\ude42<\/p>\n<p>  \u041d\u0435 \u0432\u0435\u0440\u0438\u0442\u0435?<br \/>  \u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0442\u0435\u0441\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 \u043d\u0435\u0448\u0442\u0430\u0442\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 (\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u043e \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u044e \u0441\u0442\u0435\u043a\u0430) \u0438 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0440\u0430\u0437\u0440\u0443\u0448\u0438\u0442\u044c\u0441\u044f?<\/p>\n<p>  \u0414\u0443\u043c\u0430\u0435\u0442\u0435 \u044d\u0442\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u043e?<br \/>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e \u2014 \u0441\u043a\u0430\u0436\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438.<br \/>  \u0415\u0441\u043b\u0438 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u044f\u043c\u043e \u0432\u043e\u0442 \u0442\u0430\u043a \u0441 \u0445\u043e\u0434\u0443 \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u00ab\u0443\u0431\u0438\u0442\u0438\u044f\u00bb \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043f\u043e \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u043c\u0443 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044e \u2014 \u0441 \u043c\u0435\u043d\u044f \u043f\u0435\u0447\u0435\u043d\u044c\u043a\u0430 \ud83d\ude42<\/p>\n<p>  \u041d\u0443 \u0430 \u0435\u0441\u043b\u0438 \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0438 \u044d\u0442\u043e\u0442 \u0442\u0435\u0441\u0442 \u043d\u0435 \u043d\u0430\u0434\u0435\u0436\u0435\u043d, \u0442\u043e \u0441\u043a\u0430\u0436\u0443 \u2014 \u0443 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043a\u0443\u0441\u043e\u0447\u043a\u0430 (\u0433\u0440\u0443\u0431\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043c\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u043d\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u0430).<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0434\u0432\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0438:<\/p>\n<ul>\n<li>\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0444\u043b\u044d\u0448\u043a\u0438 \u2014 \u0443\u0431\u044c\u0435\u0442\u0435 \u0444\u0430\u0439\u043b \u043f\u0440\u0438 \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0438 \u0444\u043b\u0435\u0448\u043a\u0438, \u0435\u0441\u043b\u0438 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u0438 \u043b\u043e\u0447\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<\/li>\n<li>\u0421\u0442\u0430\u0432\u044c\u0442\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 AddVectoredExceptionHandler. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u043c \u2014 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0443\u0445\u043d\u0435\u0442 \u043d\u0435 \u0443\u0441\u043f\u0435\u0432 \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 SEH. \u0410 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0432\u044b, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0437\u0430\u043a\u0440\u043e\u0435\u0442\u0435 \u0444\u0430\u0439\u043b \u2014 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0432\u0435\u0434\u044c \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. (\u041f\u043e\u0442\u043e\u043c \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0435 \u0435\u0433\u043e \u0437\u0430\u043d\u043e\u0432\u043e, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0431\u044b\u043b False Alarm \ud83d\ude42<\/li>\n<\/ul>\n<p>  \u041d\u0443 \u0430 \u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e \u0441\u0432\u043e\u0435 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435, \u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"http:\/\/rouse.drkb.ru\/blog\/storage.zip\">\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u0440\u0430\u0442\u044c \u0442\u0443\u0442<\/a>.<\/p>\n<p>  \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0432\u044b\u0440\u0430\u0436\u0430\u044e \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c \u0444\u043e\u0440\u0443\u043c\u0430 &quot;<a href=\"http:\/\/www.delphimaster.ru\/\">\u041c\u0430\u0441\u0442\u0435\u0440\u0430 \u0414\u0435\u043b\u044c\u0444\u0438<\/a>&quot; \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0441 \u0432\u044b\u0447\u0438\u0442\u043a\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0435\u0440\u0435\u0434 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>  \u0417\u042b: \u043a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u043d \u0444\u0430\u0439\u043b\u043e\u0432 (\u0434\u043b\u0438\u043d\u043e\u0439 \u0434\u043e 1024 \u0441\u0438\u043c\u0432\u043e\u043b\u0430). \u0417\u0430\u0434\u0443\u043c\u0430\u0439\u0442\u0435\u0441\u044c, \u0430 \u043a\u0430\u043a \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0430\u0436\u0435 \u043d\u0435 NTFS? \ud83d\ude42<\/p>\n<p>  \u0423\u0434\u0430\u0447\u0438 \ud83d\ude42<\/p>\n<p>   \u2014 \u00a9 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 (Rouse_) \u0411\u0430\u0433\u0435\u043b\u044c<\/p>\n<p>  \u041c\u0430\u0440\u0442, 2015     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/254541\/\"> http:\/\/habrahabr.ru\/post\/254541\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t\u0421 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0434\u0430\u0432\u043d\u043e, \u0431\u043e\u043b\u044c\u0448\u0435 15 \u043b\u0435\u0442. \u0417\u0430 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0443 \u043c\u0435\u043d\u044f \u043d\u0430\u043a\u043e\u043f\u0438\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043b\u044e\u0441\u0430\u0445 \u0438 \u043c\u0438\u043d\u0443\u0441\u0430\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<br \/>  \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043b\u0435\u0442\u0443, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b?<br \/>  \u0414\u043b\u044f \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043d\u0435\u043a\u043e\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 (NoSQL \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e).<br \/>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0444\u0430\u0439\u043b\u044b \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 Microsoft Office \u043e\u0442 97 \u0434\u043e 2003 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e (\u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0444\u0430\u0439\u043b\u043e\u0432), \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u0440\u0430\u0437 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0421\u0435\u0439\u0447\u0430\u0441 \u0442\u043e\u0436\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f ZIP.<\/p>\n<p>  \u0418\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b MSI \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0438 \u0434\u0430\u0436\u0435 \u0444\u0430\u0439\u043b \u043a\u044d\u0448\u0430 \u044d\u0441\u043a\u0438\u0437\u043e\u0432 \u043f\u0430\u043f\u043e\u043a Thumbs.db \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442.<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0436\u0435 Word \u0435\u0441\u0442\u044c \u0446\u0435\u043b\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441 \u0443\u0442\u0438\u043b\u0438\u0442 (Recovery for Word, Word Recovery Toolbox, Munsoft Easy Word Recovery) \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0445, \u043d\u0443 \u0438\u043b\u0438 \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043f\u044b\u0442\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c, \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b. \u0412\u044b\u0432\u043e\u0434\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u0438.<br \/>  \u0425\u043e\u0442\u044f, \u043f\u0440\u0438 \u0434\u043e\u043b\u0436\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0438\u0445 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c (\u0438 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a).<\/p>\n<p>  \u041d\u0443 \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0435\u0441\u043e\u043c\u043d\u0435\u043d\u043d\u044b\u043c \u043f\u043b\u044e\u0441\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438 \u043f\u0430\u043f\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043d\u044e\u0430\u043d\u0441. \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u0440\u043e\u0432\u0435\u043b \u043e\u043f\u0440\u043e\u0441 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u043e\u0440\u0443\u043c\u0430\u0445, \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u043f\u0440\u0438\u0447\u0435\u043c \u043f\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u2014 \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435.<br \/>  \u0412\u043e\u0442 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u0437\u0430\u043a\u0440\u043e\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0431\u0435\u043b.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-254221","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/254221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=254221"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/254221\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=254221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=254221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=254221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}