hello,
I want to read number of files one after one in SD folder, i use rSD list files to get files list then read files, the problem is when joining folder name with file name to get full path, MEGA starts over and some times timer stop working. for testing purpose i hard-coded file name then everything worked OK
file name is like '01234567.DAT' folder name like 'dat' i want to get 'dat/01234567.DAT' i tried join strings but it did not work too. any ideas
I want to read number of files one after one in SD folder, i use rSD list files to get files list then read files, the problem is when joining folder name with file name to get full path, MEGA starts over and some times timer stop working. for testing purpose i hard-coded file name then everything worked OK
file name is like '01234567.DAT' folder name like 'dat' i want to get 'dat/01234567.DAT' i tried join strings but it did not work too. any ideas
B4X:
private Sub UploadAllUserAccounts(SendFileInfo As Boolean,StreamSource As AsyncStreams) As Boolean
Dim Size As ULong = 0
SetSD(ON)
LCD.Clear
PutString(0,1,"Please Wait...",True)
If SendFileInfo Then
For Each Fl As File In SD.ListFiles("dat") ' get total file size in folder
Size = Size + 66 + 2 'only first four fields
Next
'send file info only for once, upload user files as stream of ONE united file
Dim Tmp(18) As Byte
Dim RAF As RandomAccessFile
RAF.Initialize(Tmp,False)
RAF.WriteByte(0x02,RAF.CurrentPosition)
RAF.WriteBytes("USERS.DB".GetBytes,0,8,RAF.CurrentPosition)
RAF.WriteByte(SYS_DATA_FILES_DELIMITION_CHR,RAF.CurrentPosition)
RAF.WriteBytes(NumberFormat(Size,8,0).GetBytes,0,8,RAF.CurrentPosition) 'file size
SetSD(OFF)
SendStreamMessage(Tmp,Tmp.Length,True,StreamSource)
SetSD(ON)
End If
'Dim cb(101) As Byte
Dim cb(66) As Byte
For Each f As File In SD.ListFiles("dat")
If SD.OpenRead(GetUserAccountFileName(f.Name)) = False Then 'GetUserAccountFileName is the problem
LCD.Clear
Return False
End If
'SD.Stream.ReadBytes(cb,0,101) 'read 101 bytes
SD.Stream.ReadBytes(cb,0,66)
SD.Stream.Flush
Delay(10)
SD.close
SetSD (OFF)
SendStreamMessage(cb,cb.Length,True,StreamSource)
SetSD (ON)
Next
LCD.Clear
SetSD (OFF)
SendStreamMessage(Array As Byte (0x04),1,True,StreamSource)'end of transmission
'SetSD (True)
Return True
End Sub
B4X:
private Sub GetUserFileName(ItemID As String) As String
Dim filename As String
Private raf As RandomAccessFile
Dim FileNameArr (16) As Byte
Dim filename As String
raf.Initialize(FileNameArr, True)
raf.WriteBytes("dat/", 0, 4, raf.CurrentPosition)
'raf.WriteBytes(Str.LeadChar(ItemID,Asc("0"),8), 0, 8, raf.CurrentPosition) 'leading zeros
raf.WriteBytes(NumberFormat(ItemID,8,0), 0, 8, raf.CurrentPosition) 'leading zeros
raf.WriteBytes(".DAT", 0, 4, raf.CurrentPosition)
filename = BC.StringFromBytes(FileNameArr)
Return filename
End Sub