gpt4 book ai didi

c++ - 从路径中提取文件名

转载 作者:行者123 更新时间:2023-11-27 23:27:01 25 4
gpt4 key购买 nike

好的,我有以下内容:

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 报告为“坏指针”。我承认我在编程方面还是很菜鸟,对指针知之甚少,更不用说双指针了。但任何帮助将不胜感激。谢谢。

最佳答案

您正在使用的函数的长度为 76 行。这不是灾难性的长,但它已经到了难以推理的地步。将此功能分成几个较小的功能可能是值得的。您正在处理的一个问题是如何从完整路径中提取文件名。您可以编写一个带有如下签名的函数:

char *filename_from_path(const char *fullpath);

接受完整路径并返回仅包含文件名的新字符串。 (注意:您必须小心谁分配和释放文件名字符串)。像这样分解一个函数的妙处在于,通常会有关于如何做小的子部分的好建议:

Extract file name from full path in C using MSVS2005 ,例如。

分离出该逻辑将使您更容易推断出您正在处理的更大循环。

关于c++ - 从路径中提取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8581787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com