読込んだ文字列でDeleteFileWを使うには
Visual Studio2005を用いて、Windows Mobile上で動作するWin32アプリケーションを
コーディングしています。言語はC++を選択しています。
DeleteFileW関数で困っており、みなさんのご意見を聞かせていただきたいと思います。
よろしくお願いします。
・PGの概要
ファイルに書かれている内容(削除したいファイルのパス及びファイル名)を読み込んで、
該当するファイルをDeleteFileW関数で削除するというものです。
・困っている点
読み込んだ文字列をANSIからUnicodeに変換しても(下記のdelete_file1())、
パスを記載したファイルをUnicodeで作成して読み込んでも(下記のdelete_file2())、
ファイルを削除できません。
コンパイルは正常にできるので、何が悪いのかわかりません。
・コード
#include<windows.h>
#include<norify.h>
#include<stdio.h>
//ANSIで読み込んだ文字列をUnicodeに変換して指定したファイルを削除する
int delete_file1()
{
FILE *fp;
char readString[42] = "";
TCHAR readString2[42] = L"";
if((fp = fopen("\\Storage Card\\test.txt", "r")) == NULL)
{
MessageBoxW(NULL, L"open_error", L"open_error", 0);
}
fgets(readString, 42, fp);
{
#ifdef UNICODE
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, readString, 42, readString2, sizeof(readString));
#else
strcpy(readString2,readString);
#endif
if( DeleteFileW(readString2) == TRUE)
{
MessageBoxW(NULL, readString2, L"delete_OK", 0);
}else{
MessageBoxW(NULL, readString2, L"delete_NG", 0);
}
return 0;
}
//中身がUnicodeで書かれたファイルを読み込んで指定されたファイルを削除する
int delete_file2()
{
HANDLE hand;
hand = CreateFile(L"\\Storage Card\\testread.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
TCHAR readString[MAX_PATH];
DWORD dword;
ReadFile(hand, readString, sizeof(readString), &dword, NULL);
CloseHandle(hand);
if( DeleteFileW(readString) == TRUE)
{
MessageBoxW(NULL, readString2, L"delete_OK", 0);
}else{
MessageBoxW(NULL, readString2, L"delete_NG", 0);
}
return 0;
}
//メイン関数
int WinMain(HINSTANCE hInstance, HINSTANCE hPreinstance, LPWSTR lpCmdLine, int nShowCmd)
{
//動作を確認したい方をコメントアウトから外して実行
// delete_file1();
// delete_file2();
return 0;
}
お礼
回答ありがとう ポインターの演算を避けたいので 下記のようにしました if (sP != NULL) { *sP = 0; CComBSTR sWork = sDirName.m_str; sDirName = sWork; }