我正在用Embarcadero Delphi XE5为OS X编写一个小型FireMonkey-App(在iMac上进行了10.9测试),以从连接到Win7机器的Samba“驱动器”中读取文本文件。双击可以访问该文件,但是TStringList似乎无法加载它。我没有收到任何错误消息(甚至没有例外)。调用LoadFromFile()后,Text属性为空。
我尝试了TStringList,TStringStream(具有DataString属性),TFileStream和FileOpen()/ FileRead()/ FileClose()。加载后,前两个似乎为空。TFileStream不会读取数据或读取垃圾(也许我只是写错了)。但是FileOpen()/ FileRead()可以正常工作。是否可以在FireMonkey应用程序中使用TStringList,还是对多平台应用程序有某种限制?
PS:我尝试将共享文件夹安装为Guest和Win7计算机的管理员用户。
这是我用来测试的示例代码:
procedure TForm1.Button2Click(Sender: TObject);
var
sl: TStringList;
ss: TStringStream;
fs: TFileStream;
b: array[0..20480] of char;
sFile: String;
FileHandle : Integer;
iFileLength: Integer;
Buffer: PAnsiChar;
iBytesRead: Integer;
begin
sFile := '/Volumes/freigabe/aida64_2013-12-13_18-50-09_log.csv';
sl := TStringList.Create();
sl.LoadFromFile(sFile);
ShowMessage(sl.Text); // Empty
ss := TStringStream.Create();
ss.LoadFromFile(sFile);
ShowMessage(ss.DataString); // Empty
fs := TFileStream.Create(sFile, fmOpenRead);
fs.Read(b, fs.Size);
ShowMessage(AnsiString(b)); // Garbage data - I think I do it wrong with Read() above...
// Example from documentation
FileHandle := SysUtils.FileOpen(sFile, fmOpenRead);
if FileHandle > 0 then
begin
try
iFileLength := SysUtils.FileSeek(FileHandle,0,2);
FileSeek(FileHandle, 0, 0);
Buffer := PAnsiChar(System.AllocMem(iFileLength + 1));
iBytesRead := SysUtils.FileRead(FileHandle, Buffer^, iFileLength);
finally
FreeMem(Buffer);
ShowMessage(Buffer); // OK!
end;
end
else
ShowMessage('Error');
sl.Free;
ss.Free;
fs.Free;
end;
我对LoadFromFile
本地文件也有同样的问题。Text属性一直为空。在我使用Encoding参数调用该方法后,它起作用了:
htmlFile := TStringList.Create;
htmlFile.LoadFromFile(sourceFile, TEncoding.ASCII);
希望这对您也有帮助。
安迪
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句