Özel dosya uzantısı oluşturma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
seci20

Özel dosya uzantısı oluşturma

Mesaj gönderen seci20 »

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...
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Özel dosya uzantısı oluşturma

Mesaj gönderen ertank »

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:

Kod: Tümünü seç

uses
  SynCommons;

begin
  FileSynLZ('.\001.bmp','.\bmp.benimkendidosyaekim', Hash32('dosyayı açmada kullanacağım sabit değer'));
end;
Sıkıştırılmış dosyayı açmak için FileUnLz() fonksiyonunu kullanmanız gerekecektir.
nguzeller
Üye
Mesajlar: 109
Kayıt: 19 Oca 2004 03:29

Re: Özel dosya uzantısı oluşturma

Mesaj gönderen nguzeller »

güzel bir sıkıştırma kütüphanesi teşekürler
seci20

Re: Özel dosya uzantısı oluşturma

Mesaj gönderen seci20 »

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 ?
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Özel dosya uzantısı oluşturma

Mesaj gönderen ertank »

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:

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;
ErdemDiablo
Üye
Mesajlar: 4
Kayıt: 25 Oca 2021 01:37

Re: Özel dosya uzantısı oluşturma

Mesaj gönderen ErdemDiablo »

Bende bunu arıyorum ama bende bulamadım ve yazılanlardan da pek birşey anlamadım daha açıklayıcı olabilirmisiniz??
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Özel dosya uzantısı oluşturma

Mesaj gönderen ertank »

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.
Cevapla