Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Error al Grabar TXT (https://www.clubdelphi.com/foros/showthread.php?t=95212)

pruz 27-05-2021 21:33:58

Error al Grabar TXT
 
Hola , estoy que exploto...
Escribi estos 4 lineas de codigo y todas me dan el mismo error, (cannot create file cargar5.txt, Read-Only file system)
para todos los archivo y directorios
alguien me puede ayudar
caso 1:
Código Delphi [-]
  Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetDownloadsPath , '/carga5.txt'));
  Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetDocumentsPath, '/carga6.txt'));
  Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetTempPath, '/carga7.txt'));
  Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetPublicPath, '/carga8.txt'));
caso 2:
Código Delphi [-]
  Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetDownloadsPath , '\carga5.txt'));
  Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetDocumentsPath, '\carga6.txt'));
  Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetTempPath, '\carga7.txt'));
  Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetPublicPath, '\carga8.txt'));
saludos

Casimiro Notevi 27-05-2021 22:22:46

¿Y tienes permiso para escribir ahi?

pruz 27-05-2021 22:29:42

si modifique el androidmanistio.xml, aqui esta el codigo

<%uses-permission%>

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-feature android:glEsVersion="0x00020000" android:required="True"/>

Casimiro Notevi 27-05-2021 22:44:25

No sé cómo será con Delphi para Android, pero con otros lenguajes debes solicitar el permiso al usuario.
Algo similar a esto:
Código Delphi [-]
var rp As RuntimePermissions
rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
Wait For Activity_PermissionResult(Permission As String, bSuccess As Boolean)
If bSuccess Then  // ha dado permiso
  // escribir

else
  // no ha dado permiso

Neftali [Germán.Estévez] 28-05-2021 09:15:07

Yo he probado este código:

Código Delphi [-]
procedure TForm4.Button1Click(Sender: TObject);
var
  fName:string;
begin

  Memo1.Lines.Add('Grabar en [GetDownloadsPath]');
  fName := TPath.Combine(TPath.GetDownloadsPath , 'carga5.txt');
  Memo1.Lines.SaveToFile(fName);
  Memo1.Lines.Add(fName);
  Memo1.Lines.Add('Existe: ' + BoolToStr(FileExists(fName), True));

  Memo1.Lines.Add('Grabar en [GetDocumentsPath]');
  fName := TPath.Combine(TPath.GetDocumentsPath, 'carga6.txt');
  Memo1.Lines.SaveToFile(fName);
  Memo1.Lines.Add(fName);
  Memo1.Lines.Add('Existe: ' + BoolToStr(FileExists(fName), True));

  Memo1.Lines.Add('Grabar en [GetTempPath]');
  fName := TPath.Combine(TPath.GetTempPath, 'carga7.txt');
  Memo1.Lines.SaveToFile(fName);
  Memo1.Lines.Add(fName);
  Memo1.Lines.Add('Existe: ' + BoolToStr(FileExists(fName), True));

  Memo1.Lines.Add('Grabar en [GetPublicPath]');
  fName := TPath.Combine(TPath.GetPublicPath, 'carga8.txt');
  Memo1.Lines.SaveToFile(fName);
  Memo1.Lines.Add(fName);
  Memo1.Lines.Add('Existe: ' + BoolToStr(FileExists(fName), True));
end;

Con Delphi 10.3 sobre un Android, con el SDK "platforms\android-26"
Los permisos, desde las opciones del proyecto y sólo he asignado estos (el resto desactivados):




La salida por pantalla es esta:




Y comprobando con el Explorador de archivos del teléfono los ficheros están ahí.

pruz 31-05-2021 23:46:36

Muchas gracias
los probare

viverosjosem 06-06-2021 07:12:19

Hola Pruz.
Nose si ya solucuonaste tu problema de grabacion. Pero yo en Android, grabo de esta manera.

Código Delphi [-]
procedure TFConfigIPFTP_GrabaServer;
var
   f : System.TextFile;

   x : Integer;
   sDetalle: String;
   sFile   : String;

begin
   sFile := SDCARD + 'Server.csv';

   try
     AssignFile( f, sFile );
     Rewrite(f);

     sDetalle := EdServer.Text + ';' + EdCodigo.Text + ';' + EdPasword.Text;
     writeln(f, sDetalle );

   finally
     CloseFile(f);
   end;
end;

Espero te sirva.

Saludos.
Jose Miguel.

pruz 08-06-2021 16:15:18

Muchas gracias a todos los que me han ayudado a avanzar en mi proyecto
espero alguna vez retribuirlo


La franja horaria es GMT +2. Ahora son las 22:34:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi