Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Standart ZIP dosyalarını açar!
(şimdiye kadar, arşivde yalnızca bir paketlenmiş dosya varken, o zaman birkaç tane yapacağım (gerekirse) )
Standart ZIP dosyalarını açar!
(şimdiye kadar, arşivde yalnızca bir paketlenmiş dosya varken, o zaman birkaç tane yapacağım (gerekirse) )
yani dosyanın altında mı?
ve mutluydum)
Not: Şüphesiz, yalnızca sizinki zaten mükemmel olsa bile
yani dosyanın altında mı?
ve mutluydum)
Not: Şüphesiz, yalnızca sizinki zaten mükemmel olsa bile
Vasili!
Peki yapılmalı mı, yapılmamalı mı?
Vasili!
Peki yapılmalı mı, yapılmamalı mı?
Henüz değil. Pazartesi MQ yorumlarını görelim. Alexander'ın gönderisine göre, konunun zip arşivinizde olduğu açık. Diğer arşivler Kodunuz paketini açmıyor:
Ve bir şeyi açmadım, dahili bir hata verdim (4024)
ps iyi en azından hata farklı.
Standart ZIP dosyalarını açar!
(şimdiye kadar, arşivde yalnızca bir paketlenmiş dosya varken, o zaman birkaç tane yapacağım (gerekirse) )
Henüz değil. Pazartesi MQ yorumlarını görelim. Alexander'ın gönderisine göre, konunun zip arşivleyicinizde olduğu açık. Diğer arşivler Kodunuz paketini açmıyor:
ps iyi en azından hata farklı.
Bir soru daha. Arşivi oluşturmak için ne tür bir zip arşivi kullanıldı ve hangi parametreler kullanıldı (sıkıştırma oranı, sözlük boyutu).Varsayılan ayarlarla WinRar.
Tüm arşivleri nasıl açacağımı biliyorum.
Ancak bunun için MQ paketleyicisinin 4 baytı hakkında biraz bilgi sahibi olmanız gerekir.
Gerekirse ben yaparım.
MQ cevap vermeyebilir :)
MQ paketleyicisindeki son 4 bayt bir karma veya CRC'dir
(servis bilgileri)
Ancak net, paketlenmiş veya ham veri değildir.
MQ'dan bir cevap beklememiz gerekecek.
O zamana kadar:
//+------------------------------------------------------------------+ //| Zip_decoder.mqh | //| Copyright 2015, Mikalas | //| https://www.mql5.com | //+------------------------------------------------------------------+ struct ZIP_HEADER { uint sign; ushort a_version; ushort bit_flag; ushort comp_method; ushort last_mod_time; ushort last_mod_date; int crc_32; uint pack_size; uint unpack_size; ushort fn_len; ushort extr_field_len; }; // ZIP_HEADER zip_header; bool f_found; //+------------------------------------------------------------------+ //| Get entryes in ZIP file | //+------------------------------------------------------------------+ uint GetEntryesZip( const string file_name, string &f_names[] ) { uint a_cnt = 0; uchar array[]; int handle = FileOpen( file_name, FILE_READ | FILE_BIN ); if ( handle != INVALID_HANDLE ) { ulong file_size = FileSize( handle ); if ( file_size > 0 ) { while ( FileTell( handle ) < file_size - 4 ) { zip_header.sign = FileReadInteger( handle, 4 ); if ( zip_header.sign == 0x04034b50 ) { a_cnt++; ArrayResize( f_names, a_cnt ); f_names[ a_cnt - 1] = ""; FileSeek( handle, -4, SEEK_CUR ); FileReadStruct( handle, zip_header ); if ( zip_header.extr_field_len != 0 ) { FileSeek( handle, zip_header.extr_field_len, SEEK_CUR ); } ArrayResize( array, int( zip_header.fn_len ) ); uint fn_res = FileReadArray( handle, array, 0, int( zip_header.fn_len ) ); for ( int i = 0; i < int( fn_res ); i++ ) { f_names[a_cnt - 1] += CharToString( array[i] ); } FileSeek( handle, zip_header.pack_size, SEEK_CUR ); } } } FileClose( handle ); } return( a_cnt ); } bool GetFile( const string src_name, const string dest_name, const int position, uchar &unp_data[] ) { uchar array[]; uchar key[]; f_found = false; int f_cnt = 0; int handle = FileOpen( src_name, FILE_READ | FILE_BIN ); if ( handle != INVALID_HANDLE ) { ulong file_size = FileSize( handle ); if ( file_size > 0 ) { while ( FileTell( handle ) < file_size - 4 ) { zip_header.sign = FileReadInteger( handle, 4 ); if ( zip_header.sign == 0x04034b50 ) { f_cnt++; FileSeek( handle, -4, SEEK_CUR ); FileReadStruct( handle, zip_header ); if ( zip_header.extr_field_len != 0 ) { FileSeek( handle, zip_header.extr_field_len, SEEK_CUR ); } ArrayResize( array, int( zip_header.fn_len ) ); uint fn_res = FileReadArray( handle, array, 0, int( zip_header.fn_len ) ); string file_name = ""; for ( int i = 0; i < int( fn_res ); i++ ) { file_name += CharToString( array[i] ); } if ( ( file_name == dest_name ) && ( position == f_cnt - 1 ) ) { f_found = true; ArrayResize( array, int( zip_header.pack_size ) + 6 ); uint ar_res = FileReadArray( handle, array, 2, int( zip_header.pack_size ) ); if ( ar_res == uint( zip_header.pack_size ) ) { array[0] = 0x78; array[1] = 0x5E; array[int( zip_header.pack_size ) + 2] = 193; //Wait MQ !!!!!!!!!!!!!!!!!!!!!!!!! array[int( zip_header.pack_size ) + 3] = 12; //Wait MQ !!!!!!!!!!!!!!!!!!!!!!!! array[int( zip_header.pack_size ) + 4] = 31; //Wait MQ !!!!!!!!!!!!!!!!!!!!!!!!! array[int( zip_header.pack_size ) + 5] = 159; //Wait MQ !!!!!!!!!!!!!!!!!!!!!!!!!!! ArrayResize( key, int( zip_header.pack_size ) + 6 ); for ( int j = 0; j < int( zip_header.pack_size ) + 6; j++ ) key[j] = 0; ResetLastError(); int dec_res = CryptDecode( CRYPT_ARCH_ZIP, array, key, unp_data ); if ( dec_res == int( zip_header.unpack_size ) ) { FileClose( handle ); return( true ); } else { Print( " Ошибка распаковки = ", GetLastError() ); FileClose( handle ); return( false ); } } break; } if ( f_found ) break; FileSeek( handle, zip_header.pack_size, SEEK_CUR ); } } } FileClose( handle ); } return( false ); }İşlev çağrısı:
Arşivdeki 2. dosyayı (GAZR-6.15.dat) çıkarır. Arşiv, WinRar tarafından varsayılan ayarlarla yapılır.
GetFile() işlevinde, ZIP arşivindeki dosyayı doğru bir şekilde tanımlamak için konum (1) parametresine ihtiyaç vardır.
Arşiv, AYNI adlara sahip dosyalar içerebilir.