I am trying to copy files from a "normal" directory to one of the
weird hidden android directories (sort of com.embarcadero.PeteA.files.tmp),
using the System.IOUtils.GetHomePath or GetTempPath. I am doing something
wrong in my transfer routine, getting garbage in the output file
and would appreciate comments please.
procedure tPeteAShowTrackBitsForm.CopyFileToTemp(fp : Juri; Home, FileName : string);
var
JFileReader : JInputStream;
JBuffer : TJavaArray<Byte>;
Transferred : integer;
f : file;
begin
JBuffer := TJavaArray<Byte>.Create(2048);
JFileReader := TAndroidHelper.Context.getContentResolver.openInputStream(fp);
home := System.IOUtils.tPath.GetTempPath + '/';
AssignFile(f, home + FileName);
ReWrite(f);
while true do
begin
Transferred := JFileReader.Read(JBuffer);
if Transferred <= 0 then break; // -1 means EOF
BlockWrite(f, JBuffer.data^, Transferred);
end;
CloseFile(f);
JFileReader.close;
end;
I tried changing it by putting in another (Delphi) buffer and copying it byte by byte:
for i := 0 to Transferred - 1 do Buffer[i] := JBuffer[i];
BlockWrite(f, Buffer, transferred);
but now get a “Disk Full” error on the first transfer, though there is buckets of free disc space.