TCHAR *到char *

时间:2014-01-22 12:52:23

标签: c++

Error : argument of type "TCHAR *" is incompatible with parameter of type "const char *" error in line : if(remove( f ) != 0 )

我想将“TCHAR f [MAX_PATH]”转换为const char *并传递给“删除”功能:

int _tmain(int argc, TCHAR *argv[])
{
    WIN32_FIND_DATA ffd;
    LARGE_INTEGER filesize;
    TCHAR szDir[MAX_PATH];
    size_t length_of_arg;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    DWORD dwError=0;
    TCHAR s[MAX_PATH];
    TCHAR f[MAX_PATH];

    // If the directory is not specified as a command-line argument,
    // print usage.

    if(argc != 2)
    {
        _tprintf(TEXT("\nUsage: %s <directory name>\n"), argv[0]);
        goto l;
    }

    // Check that the input path plus 2 is not longer than MAX_PATH.

    StringCchLength(argv[1], MAX_PATH, &length_of_arg);

    if (length_of_arg > (MAX_PATH - 2))
    {
        _tprintf(TEXT("\nDirectory path is too long.\n"));
        goto l;
    }

    _tprintf(TEXT("\nTarget directory is %s\n\n"), argv[1]);

    // Prepare string for use with FindFile functions.  First, copy the
    // string to a buffer, then append '\*' to the directory name.

    StringCchCopy(szDir, MAX_PATH, argv[1]);
    StringCchCopy(s, MAX_PATH, szDir);
    StringCchCat(szDir, MAX_PATH, TEXT("\\*"));

    // Find the first file in the directory.

    hFind = FindFirstFile(szDir, &ffd);

    if (INVALID_HANDLE_VALUE == hFind)
    {
        ErrorHandler(TEXT("FindFirstFile"));
        return dwError;
    }

    // List all the files in the directory with some info about them.
    StringCchCat(s, MAX_PATH, TEXT("/"));

    do
    {
        if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            _tprintf(TEXT("  %s   <DIR>\n"), ffd.cFileName);


        }
        else
        {
            StringCchCopy(f, MAX_PATH, s);
            StringCchCat(f, MAX_PATH, ffd.cFileName);

            filesize.LowPart = ffd.nFileSizeLow;
            filesize.HighPart = ffd.nFileSizeHigh;
            _tprintf(TEXT("  %s   %ld bytes\n"), ffd.cFileName, filesize.QuadPart);
            _tprintf(f);

            if(remove( f ) != 0 )
                perror( "Error deleting file" );
            else
                puts( "File successfully deleted" );

        }
    }
    while (FindNextFile(hFind, &ffd) != 0);

    dwError = GetLastError();
    if (dwError != ERROR_NO_MORE_FILES)
    {
        ErrorHandler(TEXT("FindFirstFile"));
    }

    FindClose(hFind);
    return dwError;

l:
    getch();
}

2 个答案:

答案 0 :(得分:2)

使用_tremove而不是删除。它适用于const TCHAR *。

答案 1 :(得分:0)

如果您的项目是unicode项目TCHAR,则相当于wchar_t而不是char,导致您的转化尝试失效。

如上所述here,在定义_UNICODE时,您需要使用wcstombs等函数。或者只是在TCHAR字符串上使用_tcslen(在 Generic-Text Routine Mappings 下查看),编译器会将它传输到strlen或wcslen,具体取决于您是否使用unicode。