我正在尝试将文件中的数据读入HBufC8变量,然后写入相同的数据 到另一个文件。这是我的测试代码;读取的内部循环重复4次以进行读取 每次迭代5000个字符。但是,当我尝试将数据写回文件时, 文件“testfile.txt”为空。会玩得多一点,但帮助会 一如既往地赞赏;)谢谢
HBufC8* iFileBuffer = HBufC8::NewL(20000);
TPtr8 ptr(iFileBuffer->Des());
fp.Seek(ESeekStart,pos);
Err = fp.Read(ptr);
while(!Err && ptr.Length()>0)
{
Err = fp.Read(ptr);
Printf(_L("Data read: %d \n\n"), ptr.Length());
}
fp.Create(iFileServer,_L("C:\\testfile.txt"), EFileWrite);
fp.Seek(ESeekEnd,pos);
fp.Write(*iFileBuffer);
fp.Close();
delete(iFileBuffer);
答案 0 :(得分:1)
你正在读最大值。 20000字节的输入文件两次。第一次读取可能已在整个文件中读取。在这种情况下,第二个读取返回0个字节,您将写入第二个文件。
此外,您可能不希望对两个文件使用相同的RFile
句柄。完成后Close
文件也是一个好习惯,尽管在关闭文件服务器会话时文件也会自动关闭。
答案 1 :(得分:-1)
在玩Symbian时我做的第一件事就是放弃疯狂的IO类并使用正常的C IO:
例如,从symbian memorybuffer
写入一个png文件 #include <stdio.h>
#include <string.h>
fp = fopen("c:\\data\\others\\pngfile.png","wb");
if(fp)
{
fwrite((char*)httpInputBufDesc->Ptr(), httpInputBufDesc->Length(), 1, fp);
fclose(fp);
fflush(fp);
}
else
{
LOG("Failed to write to disk\n");
}
作为奖励,如果您决定为不同的平台编写,这可能是便携性的3倍(这可能不是很遥远,因为Symbian似乎已经让越来越多的开发人员失去了工作,甚至还有来自诺基亚的帮助)