Хорошо, у меня есть следующие:Извлечение имени файла из пути
wchar_t **filePathList;
Это содержит список файлов, которые добавляются в список. Проблема в том, что они показывают весь путь к файлу, и я хочу получить только имя. Я думал об использовании:
wchar_t *tempChar;
начать в конце filePathList, и работать обратный путь, пока не дойдете до \
. Проблема в том, что я не совсем уверен, как справиться с этим. Это код, который я получил до сих пор:
afx_msg void Send::OnDropFiles(HDROP hDropInfo)
{
if(uploadInProgress)
{
MessageBox(L"Please wait for current upload to finish before adding files", L"Upload in progress", MB_OK);
return;
}
int len;
int prevNFiles = nFiles;
wchar_t **buffer = filePathList;
wchar_t *tempChar = NULL;
// get number of files dropped into window
nFiles += DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
filePathList = (wchar_t**)malloc(nFiles*sizeof(wchar_t*));
if(!filePathList)
{
MessageBox(L"FilePath list memory allocation failed", L"Error");
nFiles = 0;
if(buffer)
{
for(int i=0; i<prevNFiles; i++)
{
if(buffer[i]) free(buffer[i]);
}
free(buffer);
}
return;
}
memset(filePathList, 0, nFiles*sizeof(wchar_t*));
// get file names
for(int i=0; i<nFiles; i++)
{
if(i < prevNFiles)
{ // previously entered files
filePathList[i] = buffer[i];
continue;
}
// newly dropped files
len = DragQueryFile(hDropInfo, i-prevNFiles, NULL, 0)+1; // 1 for \0
tempChar = (wchar_t*)malloc(len*sizeof(wchar_t));
filePathList[i] = (wchar_t*)malloc(len*sizeof(wchar_t));
int index = len;
// Attempting to iterate through the path to get the file name
while(filePathList[i][index] != '\\')
{
tempChar = filePathList[index];
index--;
}
filePathList[i] = tempChar;
if(!filePathList[i])
{
MessageBox(L"FilePath memory allocation failed", L"Error");
for(int j=0; j<i; j++)
{
if(filePathList[j]) free(filePathList[j]);
}
free(filePathList); filePathList = NULL;
nFiles = 0;
break;
}
len = DragQueryFile(hDropInfo, i-prevNFiles, filePathList[i], len);
}
if(buffer) free(buffer);
// display files
UpdateFileListDisplay();
}
Проблема заключается в том, что Visual Studio сообщает tempChar как «плохой PTR». Я признаю, что я все еще очень зеленый, когда дело доходит до программирования, и мало знаю о указателях, а тем более о двойных указателях. Но любая помощь была бы очень оценена. Спасибо.
Можете ли вы использовать ['_splitpath'] (http://msdn.microsoft.com/en-us/library/e737s6tf.aspx)? –
Почему люди этого не делают? –
Возможно, потому что человек, задающий вопрос, попытался (и, по-видимому, не смог) сделать что-то, для чего существует стандартная функция? –