Para obtener la carpeta "Home" en rad studio XE10 tendremos que utilizar la función GetHomePath (function GetHomePath: string; static), que está en la unit System.IOutils.
Esta función devuelve la ruta de acceso principal del usuario. Si la llamada a la función genera un error, devolverá una cadena vacía.
Si queremos guardar un fichero podríamos hacerlo de la siguiente manera:
TFile.WriteAllText (TPath. GetHomePath () + TPath. DirectorySeparatorChar + 'sample.txt', 'Este es mi texto de ejemplo.');
-Ubicaciones de la ruta home en función del Sistema Operativo.:
Windows: apunta a la carpeta User's application
MacOSx: apunta a users home folder, definida por la variable $Home
IOS y Android: apunta a la localización de la sandbox de la app, que se define para cada instancia de la aplicación y para cada dispositivo IOS.
Plataforma | Path | Path ID |
---|---|---|
Windows XP | C:\Documents and Settings\ | CSIDL_APPDATA |
Windows Vistaor later | C:\Documents and Settings\ | FOLDERID_RoamingAppData |
Mac OS X | /Users/ | NSUserDirectory |
iOS Device | /private/var/mobile/Applications/ | |
iOS Simulator | /Users/ | |
Android | /data/data/ | Context.getFilesDir |
System.SysUtils.GetHomePath tiene la misma funcionalidad, pero no se recomienda cuando se está desarrollando apps multidispositivo.
IMPORTANTE:
Cuando desarrollas tu app para Android, si piensas utilizar archivos que se carguen en runtime tienes que utilizar el Deployment Manager para ponerlos en el almacenamiento interno assets\internal
Utiliza el siguiente código para localizar archivos en runtime:
TPath.Combine(TPath.GetDocumentsPath, 'filename') { Interno }
TPath.Combine(TPath.GetSharedDocumentsPath, 'filename') { Externo }
Para Android pon el Remote Path a assets\internal\
Para IOS, pon el Remote Path a StartUp\Documents
EJEMPLOS:
-Guardar un fichero a la sdcard con Android:
memo1.lines.savetofile('/sdcard/Download/test.txt');
-Guardarlo en la Home
Memo.Lines.SaveToFile((TPath.GetHomePath () + '/test.txt');
-Guardar un fichero en la carpeta Downloads:
Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetDownloadsPath, 'test.txt'));
Memo1.Lines.LoadFromFile(TPath.Combine(TPath.GetDownloadsPath, 'test.txt'));
-Leer un documento de la carpeta Documents
System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim + 'myfile'
System.IOUtils.TPath.Combine(System.IOUtils.tpath.getdocumentspath,'prueba.txt');
-Listar el contenido de tu device storage folder:
P := '/storage/';
if (FindFirst(P + '*', faAnyFile, Sr) = 0) then
repeat
Memo1.Lines.Add(Sr.Name);
until (FindNext(Sr) <> 0);
FindClose(Sr);
-Definir la ruta de una Base de datos Interbase en la carpeta Documents
uses System.IOUtils;
procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
SQLConnection1.Params.Values['Database'] := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + ‘BASEDEDATOS.IB’;
end;
-Obtener los archivos de la carpeta assets/internal
uses
IOUtils;
procedure THeaderFooterForm.SpeedButton1Click(Sender: TObject);
var
DirList: TStringDynArray;
DirPath: string;
s: string;
begin
DirPath := TPath.Combine(TPath.GetDocumentsPath, 'assets');
DirPath := TPath.Combine(DirPath, 'internal');
// Display where we're looking for the files
Memo1.Lines.Add('Searching ' + DirPath);
if TDirectory.Exists(DirPath, True) then
begin
// Get all files. Non-Windows systems don't typically care about
// extensions, so we just use a single '*' as a mask.
DirList := TDirectory.GetFiles(DirPath, '*');
// If none found, show that in memo
if Length(DirList) = 0 then
Memo1.Lines.Add('No files found in ' + DirPath)
else // Files found. List them.
begin
for s in DirList do
Memo1.Lines.Add(s);
end;
end
else
Memo1.Lines.Add('Directory ' + DirPath + ' does not exist.');
end;
-Listar archivos de sistema Android en un listbox
uses System.Types, System.IOUtils, System.SysUtils;
procedure AddFiles(MyListBox: TListBox);
var
SDA: TStringDynArray;
I, II: Integer;
LBI: TListBoxItem;
begin
SDA := TDirectory.GetFiles(System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim,'*.dat');
for I := Low(SDA) to High(SDA) do
begin
II := MyListBox.Items.Add(ExtractFileName(SDA[I]));
LBI := MyListBox.ListItems[II];
LBI.ItemData.Detail := SDA[I];
end;
end;
-Guardar una imagen
procedure TForm1.Button1Click(Sender: TObject);
begin
DocPathLabel.Text := TPath.GetDocumentsPath;
Image1.Bitmap.LoadFromFile(TPath.GetDocumentsPath + PathDelim + 'imagen.jpg');
end;
-Obtener los paths del sistema
uses System.IOUtils;
procedure THeaderFooterForm.Loaded;
begin
inherited Loaded;
TPath.SetApplicationPath ('WhereAppTest');
add_path (TPath.GetTempPath, 'GetTempPath');
add_path (TPath.GetHomePath, 'GetHomePath');
add_path (TPath.GetDocumentsPath, 'GetDocumentsPath');
add_path (TPath.GetApplicationPath ('WhereAppTest'), 'GetApplicationPath');
add_path (TPath.GetSharedDocumentsPath, 'GetSharedDocumentsPath');
add_path (TPath.GetLibraryPath, 'GetLibraryPath');
add_path (TPath.GetCachePath, 'GetCachePath');
add_path (TPath.GetPublicPath, 'GetPublicPath');
add_path (TPath.GetPicturesPath, 'GetPicturesPath');
add_path (TPath.GetSharedPicturesPath, 'GetSharedPicturesPath');
add_path (TPath.GetCameraPath, 'GetCameraPath');
add_path (TPath.GetSharedCameraPath, 'GetSharedCameraPath');
add_path (TPath.GetMusicPath, 'GetMusicPath');
add_path (TPath.GetSharedMusicPath, 'GetSharedMusicPath');
add_path (TPath.GetMoviesPath, 'GetMoviesPath');
add_path (TPath.GetSharedMoviesPath, 'GetSharedMoviesPath');
add_path (TPath.GetAlarmsPath, 'GetAlarmsPath');
add_path (TPath.GetSharedAlarmsPath, 'GetSharedAlarmsPath');
add_path (TPath.GetDownloadsPath, 'GetDownloadsPath');
add_path (TPath.GetSharedDownloadsPath, 'GetSharedDownloadsPath');
add_path (TPath.GetRingtonesPath.Empty, 'GetRingtonesPath');
add_path (TPath.GetSharedRingtonesPath, 'GetSharedRingtonesPath');
FMediaPlayer := TMediaPlayer.Create(Self);
end; // Loaded //
procedure THeaderFooterForm.add_path (path, header: string);
var
item: TListViewItem;
bitmap: TBitmap;
begin
item := List_Paths.Items.Add;
item.ButtonText := 'button';
item.Detail := path;
item.Text := header;
end; // add_path //
Página muy útil (recomiendo ponerla en vuestros favoritos)
Path de las funciones RTL standard en función de las distintas plataformas soportadas (Windows, OSx, Android, IOS
Muy bueno el articulo.. les consulto... Cuando intento ejecutar en mi aplicacion delphi -
ResponderEliminarandroid, algunas de las instrucciones que mencionan arriba, como por ejemplo:
Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetDownloadsPath, 'test.txt'));
La aplicacion en mi telefono se cierra. Y en mi pc, el debug delphi se detiene, arrojando un error de "Illegal instruccion"
Saben como podria resolver esto?
gracias
Saludos
Julio