WinApi - Usuwanie pliku

0

Witam
Dlaczego poniższy kod nie usuwa pliku z folderu?

void DeleteF (std::string KCA){

	HANDLE HD;
	WIN32_FIND_DATA WF;

	wchar_t AD[100];
	wchar_t AP[100];
	wchar_t AL[100];

	MultiByteToWideChar( CP_ACP, 0, (KCA + "/").c_str(), - 1, AD, 100 );	
	
	HD = FindFirstFile (AD, &WF);

	wsprintf (AP, AD, WF.cFileName);

	DeleteFile (AP);

}

Gdy powyższy kod zamienię na poniższy plik o nazwie esad.save zostaje usunięty:

	MultiByteToWideChar( CP_ACP, 0, (KCA + "/esad.save").c_str(), - 1, AP, 100 );	
	DeleteFile (AP);
1
  1. chcesz usunąć plik o nazwie /? katalogi usuwa się za pomocą RemoveDirectory().

  2. KCA? a nie lepiej fileName albo coś podobnego?

  3. strasznie mieszasz kodowanie ANSI z Unicode. użyj DeleteFileA() jeśli musisz mieć ANSI, a wtedy w ogóle nie potrzebujesz osobnej funkcji ani tak kombinować. Albo trzymaj nazwę pliku od początku jako std::wstring.

0
  1. Moim celem jest usunięcie jednego z plików znajdującego się w folderze.
  2. Tę nazwę zastosowałem w innej funkcji i już do niej się przyzwyczaiłem, chociaż faktycznie może nie być zbyt intuicyjna.

Zmieniłem kod na poniższy, jednak nadal plik nie jest usuwany:

	HANDLE HD;

	WIN32_FIND_DATAA WF;

	HD = FindFirstFileA ((KCA + "/").c_str(), &WF);

	std::string FN = KCA + "/" + WF.cFileName;

	DeleteFileA (FN.c_str());

WF.cFileName ma wartość p.

0

Usuwasz plik o nazwie w zmiennej FN. Czy istnieje taki plik?
Co zwraca GetLastError() tuż za DeleteFile?

1

FindFirstFile zwraca "." (pojedyncza kropka),
Pierwsze wywołanie FindNextFile zwraca ".." (dwie kropki)
Dopiero kolejne wywołanie FindNextFile zwraca jakiś plik.

0

Dziękuję za pomoc, po dodaniu pętli problem został rozwiązany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1