const char *到TDesC16

时间:2009-09-04 14:28:22

标签: c++ symbian descriptor

我有一个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();
}

非常感谢,

3 个答案:

答案 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);
...

但请检查http://descriptors.blogspot.com

答案 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

如果可以的话,通常最好先将文件名定义为描述符文字。