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ü:

Kod: Tümünü seç
//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;
Listboxumuza eklemek kaldı. Bu olay içinde yine kendi hazırladığım procedure'e geçelim tekrar belirteyim ilkel olabilir tercih meselesi.
Kod: Tümünü seç
procedure HafizaListesi(Lists:TListBox);
var
FileList: TStringDynArray;
s: string;
begin
Lists.Items.Clear;
FileList := TDirectory.GetDirectories(GetRoot);
for s in FileList do
if Pos('sd',LowerCase(s)) > 0 then
Lists.items.Add(s);
end;
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.