我有一个const char *,它指定了我要删除的文件。 我想使用RF :: Delete删除带有TDesC16的文件 作为输入参数。有谁知道如何轻松转换
RFs fs;
TUint err;
const char *pFileToDelete = "c:\\myfile.txt";
if ( fs.Connect () == KErrNone )
{
err = fs.Delete(pFileToDelete);
fs.Close();
}
非常感谢,
答案 0 :(得分:2)
RFs fs;
TUint err;
const char *pFileToDelete = "c:\\myfile.txt";
TPtrC8 filename8 = (const TText8*)pFileToDelete;
//ok, so we could use a TBuf or a TFileName, but we'd need to now
//the size of the TBuf at compile time and
//TFileNames should never be allocated on the stack due to their size.
//Easier to use a HBufC.
HBufC* filename = HBufC::NewLC(filename8.Length());
//Copy will only do the right thing if the text in pFiletoDelete is 7-bit ascii
filename->Des().Copy(filename8);
if ( fs.Connect () == KErrNone ){
err = fs.Delete(*filename);
fs.Close();
}
CleanupStack::PopAndDestroy(filename);
我实际上没有编译这段代码所以它可能需要som TLC。
答案 1 :(得分:0)
这些方面的东西:
_LIT(KMyFilename,"c:\\myfile.txt");
TPtrC filename(KMyFilename);
RFs fs;
TInt err =fs.Connect();
User::LeaveIfError(err);
err = fs.Delete(filename);
...
答案 2 :(得分:-1)
取决于字符串pFileToDelete
的字符编码。如果您不知道,那么您需要找出(或自己定义)。
假设它是7位ASCII,那么
TPtr8 wrapper(pFileToDelete, User::StringLength(pFileToDelete));
{
TFileName name;
name.Copy(wrapper);
error = fs.Delete(name);
}
支持就在那里因为TFileName是一个非常大的类(512字节左右,IIRC),所以你想稍微警惕将一个放在堆栈上,并给它尽可能小的范围。你可以改为堆分配。
如果是UTF-8,那么还有更多工作要做,请查看课程ConvertToUnicodeFromUTF8
中的CnvUtfConverter
。
如果可以的话,通常最好先将文件名定义为描述符文字。