Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Dosyalama
#1
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 ?
Cevapla
#2
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": https://stackoverflow.com/questions/5991...-findfirst
kisisel_logo_dark.png
WWW
Cevapla
#3
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;
Cevapla
#4
(11-03-2018, Saat: 21:36)dkadir Adlı Kullanıcıdan Alıntı: 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 ?

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ış
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi