Kolay gelsin ustalarım. özel dosya uzantısı nasıl yapabilirim internette pek makale bulamadım bunla ilgili.
Örnek verecek olursak diğer programcılar 4 tane ayrı dosyayı tek dosya yapmışlar bide özel uzantı yapmışlar örneğin .oct şeklinde. Sadece kendi programları okuyor o dosyayı. Yani hem dosya birleştirmişler hemde özel uzantı yapmışlar. Şimdiden yardım eden ustalarıma çok teşekkür ederim...
Özel dosya uzantısı oluşturma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Özel dosya uzantısı oluşturma
Merhaba,
Aklıma gelen ilk yöntem mORMot kütüphanesinden faydalanmak.
https://synopse.info/fossil/wiki/Synopse+OpenSource
Bu kütüphane içinde ZIP sıkıştırma ve kedine özel bir formatı olan LZ sıkıştırma imkanı var.
LZ sıkıştırma yöntemi log dosyalarını kopyalamaktan daha hızlı sıkıştırarak farklı yerlere yedekleme amaçlı geliştirilmiş en başlarda. Çok ciddi sıkıştırma oranları yok. Ancak hızlı çalışan bir algoritması var. Sıkıştırma yaparken verilen hash kullanılarak sıkıştırılıyor. Açarken yine aynı hash değerinin verilmesi gerekiyor. Yoksa açamazsınız. Daha önce birden fazla dosya sıkıştırmayı denemedim. Ancak kütüphanenin çok detaylı bir dökümantasyonu var. Oradan incelenebilir.
Her durumda SynZip kullanarak *sıkıştırma yapmadan* LZ olarak sıkıştırılmış dosyaları tek bir zip dosyası içinde toplamanız da mümkün.
Çok basit bir örnek kod aşağıdaki gibidir:
Sıkıştırılmış dosyayı açmak için FileUnLz() fonksiyonunu kullanmanız gerekecektir.
Aklıma gelen ilk yöntem mORMot kütüphanesinden faydalanmak.
https://synopse.info/fossil/wiki/Synopse+OpenSource
Bu kütüphane içinde ZIP sıkıştırma ve kedine özel bir formatı olan LZ sıkıştırma imkanı var.
LZ sıkıştırma yöntemi log dosyalarını kopyalamaktan daha hızlı sıkıştırarak farklı yerlere yedekleme amaçlı geliştirilmiş en başlarda. Çok ciddi sıkıştırma oranları yok. Ancak hızlı çalışan bir algoritması var. Sıkıştırma yaparken verilen hash kullanılarak sıkıştırılıyor. Açarken yine aynı hash değerinin verilmesi gerekiyor. Yoksa açamazsınız. Daha önce birden fazla dosya sıkıştırmayı denemedim. Ancak kütüphanenin çok detaylı bir dökümantasyonu var. Oradan incelenebilir.
Her durumda SynZip kullanarak *sıkıştırma yapmadan* LZ olarak sıkıştırılmış dosyaları tek bir zip dosyası içinde toplamanız da mümkün.
Çok basit bir örnek kod aşağıdaki gibidir:
Kod: Tümünü seç
uses
SynCommons;
begin
FileSynLZ('.\001.bmp','.\bmp.benimkendidosyaekim', Hash32('dosyayı açmada kullanacağım sabit değer'));
end;
Re: Özel dosya uzantısı oluşturma
güzel bir sıkıştırma kütüphanesi teşekürler
Re: Özel dosya uzantısı oluşturma
Hocam çok teşekkür ederim dediğiniz gibi oldu bunu birde direk çıkarmadan okuma sansımız varmı aynı tar dosyasında olduğu gibi ?
Re: Özel dosya uzantısı oluşturma
TAR uygulaması sıkıştırma yapmadığı için verileri direk olarak tar dosyası içinden okumak mümkündür. Ancak sıkıştırılmış dosyalarda durum böyle değil. Orjinal verileri okumak için mutlaka dosyanın açılıp verilerin genişletilmesi zorunludur.
Bununla birlikte *sıkıştırılmamış* açık dosya boyutlarının çok büyük olmadığı durumlarda verileri mutlaka disk dosyasına açmanız gerekmeyebilir. Hafızaya açıp orada yapmak istediğiniz işlemleri gerçekleştirebilirsiniz.
Aşağıda fikir vermesi açısından test edilmemiş mORMot kütüphanesini kullanan kod örneğini bulabilirsiniz:
Bununla birlikte *sıkıştırılmamış* açık dosya boyutlarının çok büyük olmadığı durumlarda verileri mutlaka disk dosyasına açmanız gerekmeyebilir. Hafızaya açıp orada yapmak istediğiniz işlemleri gerçekleştirebilirsiniz.
Aşağıda fikir vermesi açısından test edilmemiş mORMot kütüphanesini kullanan kod örneğini bulabilirsiniz:
Kod: Tümünü seç
uses
SynCommons;
procedure TForm1.Button1Click(Sender: TObject);
var
msIN: TMemoryStream;
msOUT: TMemoryStream;
sLen: Int64;
fs: TFileStream;
TempString: string;
begin
msIN := TMemoryStream.Create;
try
fs := TFileStream.Create('.\bmp.benimkendidosyaekim', fmOpenRead);
fs.Read(sLen, SizeOf(sLen));
msIN.CopyFrom(fs, sLen);
msIN.Position := 0;
msOUT := TMemoryStream.Create();
try
msOUT := SynCommons.StreamUnSynLZ(msIN, SynCommons.Hash32(RawByteString('dosyayı açmada kullanacağım sabit değer')));
msOUT.Position := 0;
SetString(TempString, PChar(msOUT.Memory), msOUT.Size div SizeOf(Char));
// Bu noktada veri "TempString" içinde açık durumda olmalı
// Yapmak istediğiniz işlemleri gerçekleştirebilirsiniz
finally
msOUT.Free;
end;
finally
msIN.Free();
end;
end;
-
- Üye
- Mesajlar: 4
- Kayıt: 25 Oca 2021 01:37
Re: Özel dosya uzantısı oluşturma
Bende bunu arıyorum ama bende bulamadım ve yazılanlardan da pek birşey anlamadım daha açıklayıcı olabilirmisiniz??
Re: Özel dosya uzantısı oluşturma
Merhaba,
Yazılanlardan birşey anlamadığınızı ifade etmişsiniz. Bütün mesajları baştan sona okuduğunuz halde mi anlaşılmıyor?
- İlgili işlemi yapan ücretsiz kod kaynağı bağlantısı mevcut.
- Kod örneği ve kodun çalışması için "uses" kısmına eklenmesi gereken ünite adı mevcut.
- Orjinal soruyu soran kişi ilk örnek kodu başarılı şekilde kullanabilmiş. Alternatif versiyon talep etmiş.
Sizin anlamadığınız kısım neresi eğer siz daha açık yazabilirseniz yardımcı olmaya çalışılabilir.
Yazılanlardan birşey anlamadığınızı ifade etmişsiniz. Bütün mesajları baştan sona okuduğunuz halde mi anlaşılmıyor?
- İlgili işlemi yapan ücretsiz kod kaynağı bağlantısı mevcut.
- Kod örneği ve kodun çalışması için "uses" kısmına eklenmesi gereken ünite adı mevcut.
- Orjinal soruyu soran kişi ilk örnek kodu başarılı şekilde kullanabilmiş. Alternatif versiyon talep etmiş.
Sizin anlamadığınız kısım neresi eğer siz daha açık yazabilirseniz yardımcı olmaya çalışılabilir.