Bir özelliğimden bahsetmek isterim hazır delphinin hazır fonksiyonları yerine "ilkel" de olsa kendi fonksiyonlarımla işlem yapmaya bayılırım :)
Bu yazımda sizlere Android cihazınızın "Hafıza Kartlarına" nasıl erişebileceğiniz hakkında örneklerle ve kendi buldugum Samsung ve LG cihazlarda denediğimde olumlu sonuç aldığım örneği anlatacağım. Bu kartlar cihazınızda mevcut ise Harici ve Dahili hafıza kartı olmak üzere ikiye ayrılır.
İlk olarak Root dizinine erişmekle başlayalım. Root dizinindeki Storage "LG ve bazı cihazlarda adı MNT olabilir"
İlk Ekran Görüntüsü:
//Eklenmesi gereken USES : StrUtils function GetRoot: String; function KacTane(Seperator,Str: String):Integer; begin Result := 0; while Pos(Seperator,Str) >0 do begin System.Delete(str,1,Pos(Seperator,str) ); Inc(Result); end; end; var Tmp: String; begin Tmp := AnsiReverseString(TPath.GetSharedMusicPath); while KacTane('/',Tmp) > 1 do begin System.Delete(Tmp,1,Pos('/',Tmp) ); end; Tmp := AnsiReverseString(Tmp); Result := Tmp + '/'; end;
Root dizinimizi bulduğumuza göre artık root dizinimizdeki klasörlerden sadece hafıza kartlarımızı
Listboxumuza eklemek kaldı. Bu olay içinde yine kendi hazırladığım procedure'e geçelim tekrar belirteyim ilkel olabilir tercih meselesi.
procedure HafizaListesi(Combo:TComboBox); var FileList: TStringDynArray; s: string; begin Combo.Items.Clear; FileList := TDirectory.GetDirectories(GetRoot); for s in FileList do if Pos('sd',LowerCase(s)) > 0 then Combo.items.Add(s); end;
Şimdi sıra geldi yazdığımız kodların açıklamalarına:
TStringDynArray bildiğimiz Array of String yazılışının hızlı yazmak için kullanıldığı şeklidir aralarında hiçbir fark yoktur yani;
FileList değişkenimize TDirectory.GetDirectories("Klasör Dizini") fonksiyonu ile klasör dizinini belirtip içerisine Dizi elemanı olarak atayacağız. Bu işlemi "GetRoot" yani benim hazırlamış olduğum fonksiyon ile manuel olarak Root dizinini bulmuştuk ve tam olarak dizinin String karşılığını döndürmüştük.
Sıradaki işlemimiz içerisine Dizinler atanan FileList değişkenimizin içerisindekilerden sadece işimize yarayacak olanları almak.
Ben basit bir mantıkla araştırdığımda artık kendi baktığım cihazlarda diyim; Harici ve Dahili kartların hepsinin klasör isimelrinin içerisinde "sd" söz dilimi geçmektedir ve onların haricinde hiç gözüme çarpan olmadığı için sadece bir if sorgusu ile içerisinde "sd" geçenleri alabiliriz. Aldığımız dizi elemanlarınıda listboxa yazdırıyoruz.
Örnek Resim:
İşlemlerimiz bu kadardır. Buradan yola çıkarak kafanızda dosyalar ile ilgili birçok şeyin yapılabileceği belirebilir. Örneğin sadece Harici kartın yolunu öğrenmek istiyorsunuz if sorgusundaki "sd" yerine "ext" yazın Harici kartın yolunu getirecektir ve "ext" söz dilimi bütün harici kartlarda vardır.
Sürçü lisan olduysa affola.
İyi gidiyosun, iyi gidiyosun :)
YanıtlaSilTeşekkürler hocam :D
Sil