Delphi Can
Dosyalama - Baskı Önizleme

+- Delphi Can (http://www.delphican.com)
+-- Forum: Delphi (http://www.delphican.com/forum-delphi)
+--- Forum: Genel Programlama (http://www.delphican.com/forum-genel-programlama)
+--- Konu Başlığı: Dosyalama (/dosyalama.html)



Dosyalama - dkadir - 11-03-2018

Selamlar
Kaynak gösterilen bir dosyanın içindeki tüm dosya uzantıları alıp bu uzantılara göre kategorilendirme yapmam lazım.
Örneğin Txt dosyalarını 
Kaynak Gösterilen Klasörden alıp Hedef gösterilen klasör içerisine 'Dökümanlar\Txt Dosyaları' klasörlerini oluşturup içerisine atacak.
-VİDEOLAR
  -mp4
  -avi
-DÖKÜMANLAR
  -txt
  -docx
-RESİMLER
  -jpg
  -png

gibi kategorilendirme yapmasını istiyorum.
Nasıl yapabilirim yardımcı olurmusunuz ?


Dosyalama - hyperxman - 11-03-2018

Merhaba,

"FindFirst" fonksiyonu işinizi görecektir. Tabi biraz süslemeniz gerekecek. Konu ile ilgili tartışma bulunmakta. Alt tarafa linki bırakıyorum.

Tartışmanın geçtiği sayfa "Stackoverflow": Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol


Cvp: Dosyalama - Lord_Ares - 12-03-2018

Aşağıdaki prosedür ile belli bir klasör ve alt klasörler içindeki mp3 ve mp4 dosyalarını aratıp listboxa dosya adını ve bulunduğu yolu kaydetmek için kullanıyorum. Bunu kendine göre uyarlayabilirsin.

procedure Klasordeki_Mp3leri_yukle(const PathName,FileName: string; const InDir: boolean );
var Rec  : TSearchRec;
   Path : string;
begin
if Form1.Sarki_Listesi_ListBox.ItemIndex>-1 then Form1.Sarki_Listesi_ListBox.Clear;


Path := IncludeTrailingBackslash(PathName);
if FindFirst(Path + FileName, faAnyFile - faDirectory, Rec) = 0 then
try
  repeat
        // sendeki şöyle olabilir   if pos('.txt',Rec.Name)>0 then burada dosya taşıma komutu kullan..

        if pos('.mp3',Rec.Name)>0 then System.Delete(rec.Name, Pos('.mp3', rec.Name) , Pos('.mp3', rec.Name) + Length('.mp3')-1 );
        if pos('.mp4',Rec.Name)>0 then System.Delete(rec.Name, Pos('.mp4', rec.Name) , Pos('.mp4', rec.Name) + Length('.mp4')-1 );
    
             // istersen pos yerine  if ExtractFileExt(Rec.name)='txt' gibide kullanabilirsin ben pos kullandım.

         Form1.Sarki_Listesi_ListBox.Items.Add(Rec.Name );

  until FindNext(Rec) <> 0;
finally
  FindClose(Rec);
end;
If not InDir then Exit;
if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
try
  repeat
   if ((Rec.Attr and faDirectory) <> 0)  and (Rec.Name<>'.') and (Rec.Name<>'..') then
        Klasordeki_Mp3leri_yukle( Path + Rec.Name, FileName, True);
  until FindNext(Rec) <> 0;
finally
  FindClose(Rec);
end;
end;



Cvp: Dosyalama - narkotik - 12-03-2018

(11-03-2018, Saat: 21:36)dkadir Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSelamlar
Kaynak gösterilen bir dosyanın içindeki tüm dosya uzantıları alıp bu uzantılara göre kategorilendirme yapmam lazım.
Örneğin Txt dosyalarını 
Kaynak Gösterilen Klasörden alıp Hedef gösterilen klasör içerisine 'Dökümanlar\Txt Dosyaları' klasörlerini oluşturup içerisine atacak.
-VİDEOLAR
  -mp4
  -avi
-DÖKÜMANLAR
  -txt
  -docx
-RESİMLER
  -jpg
  -png

gibi kategorilendirme yapmasını istiyorum.
Nasıl yapabilirim yardımcı olurmusunuz ?

function Fn_DosyaListele(KlasorAdi: String; const Liste: TStrings;const Kriter: String): Integer;
 procedure DosyaTara(const Yol: String);
var
  Ara: TSearchRec;
begin
  if FindFirst(Yol + Kriter, faAnyFile, Ara) = 0 then
    repeat
      if Ara.Attr and faDirectory = 0 then
        Liste.Add(Yol + Ara.Name);
    until FindNext(Ara) <> 0;
  SysUtils.FindClose(Ara);
end;
begin
Liste.Clear;
if (KlasorAdi <> '') and (KlasorAdi[length(KlasorAdi)] <> '\') then
  KlasorAdi := KlasorAdi + '\';
DosyaTara(KlasorAdi);
Result := Liste.Count;
end;
Verilen kritere göre ornek *.txt klasordeki tum dosyalari yoluyla listeye doldur taşıma işlemi sana kalmış