Symbian:如何将HBufC *写入文件

时间:2009-08-21 13:32:09

标签: c++ symbian

我正在尝试将文件中的数据读入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);   

2 个答案:

答案 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似乎已经让越来越多的开发人员失去了工作,甚至还有来自诺基亚的帮助)