2017-02-10 19 views
0

C++ удалить любую папку:ПОЛУЧЕНИЕ Ошибка в VISUAL STUDIO: ошибка C2664: '_chmod': не удается преобразовать параметр 1 из 'wchar_t [260]' к 'сопзЬ символ *' код

#include <string> 
#include <iostream> 
#include "stdafx.h" 
#include <stdio.h> 
#include <afx.h> 
#include <windows.h> 
#include <conio.h> 
#include <io.h> 

using namespace std; 

BOOL IsDots(wchar_t* str) 
{ 
    if (_tcscmp(str, TEXT(".")) && _tcscmp(str, TEXT(".."))) 
     return FALSE; 
    return TRUE; 
} 

BOOL DeleteDirectory(wchar_t* sPath) 
{ 
    HANDLE hFind; 
    WIN32_FIND_DATA FindFileData; 

    wchar_t DirPath[MAX_PATH]; 
    wchar_t FileName[MAX_PATH]; 

    _tcscpy(DirPath, sPath); 
    _tcscat(DirPath, TEXT("\\*")); 
    _tcscpy(FileName, sPath); 
    _tcscat(FileName, TEXT("\\")); 

    //GETTING THE FISRT FILE 

    hFind = FindFirstFile(DirPath, &FindFileData); 
    if (hFind == INVALID_HANDLE_VALUE) 
     return FALSE; 
    _tcscpy(DirPath, FileName); 

    bool bSearch = true; 
    while (bSearch) { 
     if (FindNextFile(hFind, &FindFileData)) { 

      if (IsDots(FindFileData.cFileName)) 
       continue; 

      _tcscat(FileName, FindFileData.cFileName); 
      if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { 

       //DELETING THE DIRECTORY 

       if (!DeleteDirectory(FileName)) { 
        FindClose(hFind); 
        return FALSE; 
       } 
       RemoveDirectory(FileName); 
       _tcscpy(FileName, DirPath); 
      } 

      else { 

       if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) 
        _chmod(FileName, _S_IWRITE); 
       mode if (!DeleteFile(FileName)) 
       { 
        FindClose(hFind); 
        return FALSE; 
       } 

       _tcscpy(FileName, DirPath); 
      } 
     } 

     else { 
      if (GetLastError() == ERROR_NO_MORE_FILES) 
       bSearch = false; 
      else { 

       FindClose(hFind); 
       return FALSE; 
      } 
     } 
    } 
    FindClose(hFind); 

    return RemoveDirectory(sPath); 
} 

//CALLING THE DEL DIR FUNCTION 

НАДЕЖДУ НИКОМУ МОЖЕТ ПОМОЧЬ !!

я получаю следующее сообщение об ошибке:

error C2664: '_chmod' : cannot convert parameter 1 from 'wchar_t [260]' to 'const char *'

P.S. Я использую Microsoft Visual Studio.

+4

Я думаю, что ошибка довольно очевидна. У вас есть массив 'wchar_t' и попробуйте вызвать функцию, которая ожидает массив' char'. Вероятно, это связано с несоответствием между настройками макроса 'UNICODE' и что' _chmod' является нестандартной функцией, которая не входит в альтернативы с широким и узким символом. Вместо этого попробуйте использовать функцию Windows API или ['_wchmod'] (https://msdn.microsoft.com/en-us/library/1z319a54.aspx). –

+3

Пожалуйста, прекратите кричать. –

+0

_wchmod работал thnx много :) –

ответ

2

Вы используете широкие символы, но называя узким символом версия функции.

Большинство функций API Windows transparently switch between the two в силу установленного макроса UNICODE. Функция «chmod» с таким поведением - _tchmod.

Вы должны перейти на _tchmod.

+0

Я настоятельно рекомендую прочитать страницы документации, с которыми я связан. –

Смежные вопросы