Delphi Can
İmage Slider ''No Such File Or Directory Hatası" - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: İmage Slider ''No Such File Or Directory Hatası" (/showthread.php?tid=3360)



İmage Slider ''No Such File Or Directory Hatası" - keceonurr - 23-02-2019

Herkese merhaba

Fmx ile İmage slider kullanarak resimler ekletmeye çalıştım ama beklemediğim bir hatayla karşılaştım. Bir çok çözümler denedim resim klasörünü başka yerlere taşıdım yine de bir çözüme ulaşamadım. 


Kodum şu şekilde

procedure Tfrm_anasayfa.AddBitmap(const FileName: string);
var
  Bmp: TBitmap;
  p: string;
begin
  Bmp := TBitmap.Create;
  try
{$IFDEF ANDROID}
    p := TPath.Combine(System.IOUtils.TPath.GetDocumentsPath, FileName);
{$ELSE}
    p := FileName;
{$ENDIF}
    Bmp.LoadFromFile(p);
    FMXImageSlider1.Add((FMXImageSlider1.PageCount + 1).ToString, Bmp);
  finally
    Bmp.Free;
  end;
end;
resim dosya yolunu uzun halini de yazdım ama aynı hatayı alıyorum;
procedure Tfrm_anasayfa.SpeedButton4Click(Sender: TObject);
begin
{$IFDEF  ANDROID}
  AddBitmap('resim\black1.jpg');
  AddBitmap('resim\daredevil2.jpg');
  AddBitmap('resim\groot.jpg');
  AddBitmap('resim\doctor.jpg');
  AddBitmap('resim\ironman.jpg');
  FMXImageSlider1.ActivePage := 0;
{$ENDIF}
end;


Aldığım hata ise şu şekilde
https://hizliresim.com/EmWWmn

Bu konuda bana yol gösterecek arkadaşlara şimdiden teşekkür ediyorum. .Herkese iyi çalışmalar


İmage Slider ''No Such File Or Directory Hatası" - mrmarman - 23-02-2019

Resim için eklediğiniz slash ile Path Delimiter ters olabilir mi ? Idea

System.SysUtils.PathDelim

şeklinde tercih edin isterseniz.


Cvp: İmage Slider ''No Such File Or Directory Hatası" - keceonurr - 23-02-2019

(23-02-2019, Saat: 13:47)mrmarman Adlı Kullanıcıdan Alıntı: Resim için eklediğiniz slash ile Path Delimiter ters olabilir mi ? Idea

System.SysUtils.PathDelim

şeklinde tercih edin isterseniz.

Hocam bu şekilde yaptım

p := TPath.Combine(System.SysUtils.PathDelim, FileName);

bu seferde aldığım hata 

Cannot open file "/ images\black1.jpg". No such file or directory.


İmage Slider ''No Such File Or Directory Hatası" - mrmarman - 23-02-2019

Dosya yolunu bir edit ile gösterip path ve dosya adını tek bir satırda görerek sorunu gözlemler misiniz.

Open etmeye çalışmadan Edit üzerinde gördüğünüzü irdeleyin.

sonra üretilem bu yola kendiniz giderek resim doğru yerde mi onu kontrol edin. 

resme ismi kendiniz vermişseniz sonunda başında boşluk kontrolü yapın


İmage Slider ''No Such File Or Directory Hatası" - mrmarman - 23-02-2019

Size bir örnek ...
Var
 p : String;
begin
 p := TPath.Combine( System.IOUtils.TPath.GetDocumentsPath(), 'resimler' );

 Memo1.Lines.Add( p );
 Memo1.Lines.Add( '-----------------' );

 p := TPath.Combine( System.IOUtils.TPath.GetSharedDocumentsPath(), 'resimler' );

 Memo1.Lines.Add( p );
 Memo1.Lines.Add( '-----------------' );

 if NOT DirectoryExists( p ) then
 begin
   ForceDirectories( p );
   ShowMessage( 'Yeni oluşturuldu' );
 end;

 Memo1.Lines.Add( p );
 Memo1.Lines.Add( '-----------------' );

 p := TPath.Combine( p, 'ornek.jpg' );

 Memo1.Lines.Add( p );
 Memo1.Lines.Add( '-----------------' );

end;

Ürün çıktısı 
GetDocumentsPath yerine GetSharedDocumentsPath arasındaki farka dikkatinizi çekerim..

Kod:
/data/user/0/com.embarcadero.Project1/files/resimler
-----------------
/storage/emulated/0/Documents/resimler
-----------------
/storage/emulated/0/Documents/resimler
-----------------
/storage/emulated/0/Documents/resimler/ornek.jpg
-----------------
BİR EKLEME : Idea
Belki amacınızı yanlış anlamış olabilirim gerekçesiyle eklemek istedim.
- Amacınız kendi eklediğiniz resimlerin kullanıcı tarafından görünmesi / erişilmesinin önüne geçerek sadece projeniz içerisinden ulaşılmasını sağlamak ise : ( mobil cihazın ROOT edilmediğini varsayarak yazıyorum yoksa bu da aşılır )
  1. Projenize özel resimleri Delphi IDE içerisinden PROJECT menüsünün en alt kısımlarındaki DEPLOYMENT menü başlığı ile açılan aşağıda eklemek.
  2. En aşağıdaki resimde gösterdiğim, kırmızı çizgi içerisine aldığım kısımda kendinize özel isim verip lokasyonunu verirken gösterdiğim şekilde belirlemelisiniz. 
Lokasyon
Kod:
.\assets\internal\resimler\

resimler kısmı size özel bir klasör adıdır. 

Var
 p : String;
begin
 p := TPath.Combine( System.IOUtils.TPath.GetDocumentsPath(), 'resimler' );
 p := TPath.Combine( p, 'resim.jpg' );
şeklinde bir tanımlama yaparsanız 
Kod:
/data/user/0/com.embarcadero.Project1/files/resimler

/data/user/0/com.embarcadero.Project1/files/resimler/resim.jpg


klasörünü işaret etmiş olursunuz. ( project1 sizin projenin adı olacak )


sysom3vr6y7tfkdmwm1c.png


Cvp: İmage Slider ''No Such File Or Directory Hatası" - keceonurr - 23-02-2019

(23-02-2019, Saat: 16:57)mrmarman Adlı Kullanıcıdan Alıntı: Size bir örnek ...
Var
 p : String;
begin
 p := TPath.Combine( System.IOUtils.TPath.GetDocumentsPath(), 'resimler' );

 Memo1.Lines.Add( p );
 Memo1.Lines.Add( '-----------------' );

 p := TPath.Combine( System.IOUtils.TPath.GetSharedDocumentsPath(), 'resimler' );

 Memo1.Lines.Add( p );
 Memo1.Lines.Add( '-----------------' );

 if NOT DirectoryExists( p ) then
 begin
   ForceDirectories( p );
   ShowMessage( 'Yeni oluşturuldu' );
 end;

 Memo1.Lines.Add( p );
 Memo1.Lines.Add( '-----------------' );

 p := TPath.Combine( p, 'ornek.jpg' );

 Memo1.Lines.Add( p );
 Memo1.Lines.Add( '-----------------' );

end;

Ürün çıktısı 
GetDocumentsPath yerine GetSharedDocumentsPath arasındaki farka dikkatinizi çekerim..

Kod:
/data/user/0/com.embarcadero.Project1/files/resimler
-----------------
/storage/emulated/0/Documents/resimler
-----------------
/storage/emulated/0/Documents/resimler
-----------------
/storage/emulated/0/Documents/resimler/ornek.jpg
-----------------
BİR EKLEME : Idea
Belki amacınızı yanlış anlamış olabilirim gerekçesiyle eklemek istedim.
- Amacınız kendi eklediğiniz resimlerin kullanıcı tarafından görünmesi / erişilmesinin önüne geçerek sadece projeniz içerisinden ulaşılmasını sağlamak ise : ( mobil cihazın ROOT edilmediğini varsayarak yazıyorum yoksa bu da aşılır )
  1. Projenize özel resimleri Delphi IDE içerisinden PROJECT menüsünün en alt kısımlarındaki DEPLOYMENT menü başlığı ile açılan aşağıda eklemek.
  2. En aşağıdaki resimde gösterdiğim, kırmızı çizgi içerisine aldığım kısımda kendinize özel isim verip lokasyonunu verirken gösterdiğim şekilde belirlemelisiniz. 
Lokasyon
Kod:
.\assets\internal\resimler\

resimler kısmı size özel bir klasör adıdır. 

Var
 p : String;
begin
 p := TPath.Combine( System.IOUtils.TPath.GetDocumentsPath(), 'resimler' );
 p := TPath.Combine( p, 'resim.jpg' );
şeklinde bir tanımlama yaparsanız 
Kod:
/data/user/0/com.embarcadero.Project1/files/resimler

/data/user/0/com.embarcadero.Project1/files/resimler/resim.jpg


klasörünü işaret etmiş olursunuz. ( project1 sizin projenin adı olacak )


sysom3vr6y7tfkdmwm1c.png

Hocam ellerinize sağlık çok çok teşekkür ediyorum. Sayenizde bir bilgi daha edindim.