0

削除するファイルを指定する 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();
}

どうもありがとう、

4

3 に答える 3

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);

このコードを実際にコンパイルしていないため、TLC が必要になる場合があります。

于 2009-09-05T06:47:38.820 に答える
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を確認してください

于 2009-09-04T16:36:54.317 に答える
-1

string の文字エンコーディングが何であるかに依存しますpFileToDelete。わからない場合は、調べる必要があります (または自分で定義する必要があります)。

7 ビット ASCII だとすると、

TPtr8 wrapper(pFileToDelete, User::StringLength(pFileToDelete));
{
    TFileName name;
    name.Copy(wrapper);
    error = fs.Delete(name);
}

TFileName が非常に大きなクラス (512 バイト程度、IIRC) であるという理由だけで中かっこが存在するため、中かっこをスタックに置くことには少し注意し、できる限り小さいスコープを与える必要があります。代わりにヒープを割り当てることができます。

UTF-8 の場合は、さらに作業が必要です。class で確認してConvertToUnicodeFromUTF8くださいCnvUtfConverter

可能であれば、最初にファイル名を記述子リテラルとして定義することをお勧めします。

于 2009-09-04T14:44:37.730 に答える