dosya boyutu/türü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
freett
Üye
Mesajlar: 29
Kayıt: 01 Mar 2004 05:18
Konum: ANTALYA

dosya boyutu/türü

Mesaj gönderen freett »

Veri tabanına KOD,DOSYA YOLU,DOSYA ADI,AÇIKLAMA,BOYUTU,TÜR diye kayıt yaptığım bir table var.Open dialog ile dosyayı veritabanına kayıt yapabiliyorum.Ancak Türünü ve boyutunu nasıl bulacağım hakkında bir bilgim yok.mesela c:\telefon.txt diye bir dosyayı ekletim.boyut olarak :13 k ,tür olarak metin belgesi diye yazdırmak istiyorum.kısaca bir dosyanın boyutu ,türü hakında bilig edinmek istiyorum.Ayrıca c:\telefon.txt yi dosyayı çalıştır deyince açmak istiyorum.Yardımlarınızı bekliyorum.Teşekkürler...
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

FindFirst ile TSearchRec veriyapısını doldurup buradan istedigini kullanabilirsin
FindFirst diye forumda arat ornek biseyler gondermistim
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Mesaj gönderen warder »

TSearchRec yapısı tam olarak istediğini yapmıyor. Boyutunu vs alırsınız ama türünü vermez. Türü için sistemle bilgi alışverişinde bulunabileceğiniz SHGetFileInfo apisini araştırmanızı öneririm. Böylece dosya türü ile birlikte ilgili dosyanın sistemde kayıtlı bulunan tür ikonunu da alırsınız. Ancak exe dosyaların kişisel ikonlarını vermez.
Ayrıca TSearchRec yapısının alternatifi olarak TWin32FindData yapısını tavsiye ederim.
Örnek kodu ancak cpp builder için verebilirim.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
freett
Üye
Mesajlar: 29
Kayıt: 01 Mar 2004 05:18
Konum: ANTALYA

TWin32FindData ,SHGetFileInfo

Mesaj gönderen freett »

TWin32FindData ,SHGetFileInfo hakında daha fazla bilgi alabilirmiyim.

Benim Bilgilerim gridde şöyle gözükmesini istiyorum:

DOSYA ADI BOYUT TÜR
TELEFON.TXT 1230 METİN BELGESİ
VE AÇ DEYİNCE AÇMASINI İSTİYORUM

DOSYA DI YOLU VE BOYUT TAMAM DA TÜR VE AÇ DEYİNCE AÇMA OLAYI=?
TEŞEKKÜRLER
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam...

Kod: Tümünü seç

DOSYA ADI       BOYUT    TÜR 
TELEFON.TXT     1230     METİN BELGESİ
- :idea: Programınızda sadece belli türlerde dosyalarla çalışıyorsanız, uzantısı ile ve/veya uzantısı ne olursa olsun dosyanın içeriğinin bir kısmıyla binary olarak tür hakkında fikir sahibi olabilirsiniz...

- EXE dosyalar MZ ile başlar..
- TXT dosyaların içeriğinde Text dışında karakter yoktur...
- AVI dosyalar başında RIFF AVI,
- GIF, JPG, BMP gibi resim formatlarının başında türü hakkında fikir verecek BM, JFIF vb. bilgiler bulunur vs...

- :idea: Dosya uzunluğunu ise şahsen OpenFile ile açıp, Assign edip 1 Byte'lık record büyüklüğü ile reset edip FileSize ile okuyor ve CloseFile kapatıyorum oluyor...

- :idea: Açma olayı için de ShellAPI'yi uses ekleyip ShellExecute() fonksiyonu ile NotePad, Word, Excel vb. ile açtırabilirsiniz..
@fahrettin'in örneklediği link: viewtopic.php?t=1718&highlight=#8189
Resim
Resim ....Resim
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: TWin32FindData ,SHGetFileInfo

Mesaj gönderen warder »

freett yazdı:TWin32FindData ,SHGetFileInfo hakında daha fazla bilgi alabilirmiyim.

Benim Bilgilerim gridde şöyle gözükmesini istiyorum:

DOSYA ADI BOYUT TÜR
TELEFON.TXT 1230 METİN BELGESİ
VE AÇ DEYİNCE AÇMASINI İSTİYORUM

DOSYA DI YOLU VE BOYUT TAMAM DA TÜR VE AÇ DEYİNCE AÇMA OLAYI=?
TEŞEKKÜRLER
Dosya adı, yolu, boyutu tamam dediğinizden TSearchRec yapısını kullandığınızı anlıyorum.

Kod: Tümünü seç

TSearchRec BulunanDosya;
SHFILEINFO SHFInfo;
.....dosyaları aradık bulduk......
                SHGetFileInfo(BulunanDosya.Name,
                              BulunanDosya.Attr,  
                              &SHFInfo,   //& operatörü sanıyorum delphide @ 
                              sizeof(SHFInfo),  // byte cinsinden boyutu
                              SHGFI_TYPENAME |    // bu flagları araştırmalısınız
                              SHGFI_USEFILEATTRIBUTES |
                              SHGFI_ICON |   // | bit operatörü olan (veya)
                              SHGFI_SMALLICON
                              );

        Ekle(SHFInfo.szTypeName); // Metin belgesi hadisesi..
        IkonVer(SHFInfo.iIcon)        // ikon indexi registry de yazılı olan
açıklamaları satırlarda yapmaya çalıştım. Ancak bilen delphici arkadaşlar kodun Delphi için olanını verebilirler. Flaglardan istemediğiniz bilgi gelmez. Daha fazla flag kullanabilirsiniz. Bunları araştırabilirsiniz.
TWin32FindData yapısında TSearchRec yapısından fazla olarak dosyanın yaratıldığı tarih, son erişim tarihi gibi bilgiler de alınabilir. Özellikle versiyon yoklamalarında işe yarıyabilir.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
freett
Üye
Mesajlar: 29
Kayıt: 01 Mar 2004 05:18
Konum: ANTALYA

Mesaj gönderen freett »

Programınızda sadece belli türlerde dosyalarla çalışıyorsanız, uzantısı ile ve/veya uzantısı ne olursa olsun dosyanın içeriğinin bir kısmıyla binary olarak tür hakkında fikir sahibi olabilirsiniz...

- EXE dosyalar MZ ile başlar..
- TXT dosyaların içeriğinde Text dışında karakter yoktur...
- AVI dosyalar başında RIFF AVI,
- GIF, JPG, BMP gibi resim formatlarının başında türü hakkında fikir verecek BM, JFIF vb. bilgiler bulunur vs...

DAHA FAZLA BİLGİ...LÜTFEN...
talip türkmen
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam.,

- Internet Cafe'den yazıyorum syntax error olabilir... :lol:

Kod: Tümünü seç

Var
  Dosya : File;
  Okunan : Array[0..10] of Char; // sembolik olarak 11 byte verdim...
begin
  AssignFile(Dosya, 'C:\ABC.EXE'); // ABC.EXE dosyasını Dosya'ya atadık.
  Reset(Dosya, 1); // Kayıt bloklarını 1 byte olarak belirledik...ve başa konumlandık
  BlockRead(Dosya, Okunan, SizeOf(Okunan) ); // 11 byte okuduk...
  // işte elimizde bu dosyanın ilk 11 byte'ı elimizde...
  // bu 11 byte belirli sorgular yapılarak dosya hakkında bilgi verir...
  CloseFile(Dosya);
end;


- Burada herhangi bir dosyayı text olarak değil de binary olarak okumayı denedik ve başından ilk kısmın okunmasını yaptık...

- İşte yapmanız gereken şey, Okunan değişkeninin içeriğini dosya tipine göre analiz edip farkı görmeniz ve etüd edip, uygun sorgularla bu dosya bunu içeriyorsa budur şeklinde ilkeler oluşturmak... İlk iki byte MZ ise ve devamında A..Z a..z 0..9 ve noktalama işaretleri dışında ASCII kodları barındırıyorsa EXE dosyadır diye başlayabilirsin...

- RIFF AVI ile başlıyorsa ve devamında yine farklı ASCII kodlar barınıyorsa AVI dosyasıdır diyebilirsin vs.

- Daha açık nasıl yazarım bilemiyorum. Takılırsan sor...
Resim
Resim ....Resim
Cevapla