2015-05-13 5 views
0

Я пытаюсь загрузить файлы с расширением CSV в ListBox, но мой код не работает на платформе Android. Что не так с кодом?Загрузка файлов в ListBox

procedure LoadFileList(aFiles: TStringList; sPath: string; sMask: string = '*.*'); 
var 
iIndex: integer; 
SearchRec: TSearchRec; 
begin 
    if sPath[Length(sPath)] <> '\' then 
    sPath := sPath + '\'; 

    iIndex := FindFirst(sPath+sMask, faArchive, SearchRec); 

    while iIndex = 0 do begin 
      aFiles.Add(SearchRec.Name); 
      iIndex := FindNext(SearchRec); 
    end; 

    FindClose(SearchRec); 
end; 

Использование:

LoadFileList(TStringList(ListBox1.Items), TPath.GetSharedDocumentsPath, '*.csv'); 
+1

Не изобретайте колеса и посмотреть на [ 'System.IOUtils.TDirectory.GetFiles'] (http://docwiki.embarcadero.com/Libraries/XE7/ ен/System.IOUtils.TDirectory.GetFiles). Стоит иметь более глубокий взгляд на весь блок «IOUtils», он работает на удивление очень хорошо; o) –

+1

И вы не должны бросать 'TListBox.Items' в' TStringList'. Вместо этого измените аргумент 'aFiles' на' TStrings', и вам не нужен листинг –

+0

@SirRufo: вы должны были разместить их как ответ (с примером), а не как комментарии. –

ответ

0

"Не работает" очень неясное описание, но '\' выглядит очень подозрительно. Вместо этого Linux использует '/'. Также строки равны нулю на основе Delphi для Android/iOS.

Вместо

if sPath[Length(sPath)] <> '\' then 
    sPath := sPath + '\'; 

использовать независимо от платформы версии:

sPath := IncludeTrailingPathDelimiter(sPath); 
1

, так как вы используете XE7 у вас есть доступ к IOUtils. Тогда это будет делать трюк для вас:

uses 
    IOUtils; 

procedure LoadFileList(aFiles: TStrings; sPath: string; sMask: string = '*.*'); 
var 
    aFile: string; 
begin 
    aFiles.Clear; 
    for aFile in TDirectory.GetFiles(IncludeTrailingPathDelimiter(sPath), sMask) do 
    aFiles.Add(aFile) 
end; 
Смежные вопросы