Получить имя файла без расширения?
Я новичок в мире C++, я застрял с очень тривиальной проблемой, то есть, чтобы получить имя файла без расширения.
я имею TCHAR
переменная, содержащая sample.txt
и нужно только извлечь sample
, Я использовал PathFindFileName
Функция это просто вернуть то же значение, что я передал.
Я пытался найти в поисках решения, но все равно не повезло?!
РЕДАКТИРОВАТЬ: я всегда получаю трехбуквенное расширение файла, я добавил следующий код, но в конце я получаю что-то вроде Montage (2)««þîþ
как мне избежать ненужных символов в конце?
TCHAR* FileHandler::GetFileNameWithoutExtension(TCHAR* fileName)
{
int fileLength = _tcslen(fileName) - 4;
TCHAR* value1 = new TCHAR;
_tcsncpy(value1, fileName, fileLength);
return value1;
}
5 ответов
Вот как это делается.
#ifdef UNICODE //Test to see if we're using wchar_ts or not.
typedef std::wstring StringType;
#else
typedef std::string StringType;
#endif
StringType GetBaseFilename(const TCHAR *filename)
{
StringType fName(filename);
size_t pos = fName.rfind(T("."));
if(pos == StringType::npos) //No extension.
return fName;
if(pos == 0) //. is at the front. Not an extension.
return fName;
return fName.substr(0, pos);
}
Это возвращает std:: string или std::wstring, в соответствии с настройкой UNICODE. Чтобы вернуться к TCHAR*, вам нужно использовать StringType::c_str(); Это константный указатель, поэтому вы не можете его изменить, и он недействителен после уничтожения созданного им строкового объекта.
Вы можете использовать функцию PathRemoveExtension, чтобы удалить расширение из имени файла.
Чтобы получить только имя файла (с расширением), вам может понадобиться сначала использовать PathStripPath, а затем PathRemoveExtension
,
TCHAR* FileHandler::GetFileNameWithoutExtension(TCHAR* fileName)
{
int fileLength = _tcslen(fileName) - 4;
TCHAR* value1 = new TCHAR[fileLength+1];
_tcsncpy(value1, fileName, fileLength);
return value1;
}
Попробуйте приведенное ниже решение,
string fileName = "sample.txt";
size_t position = fileName.find(".");
string extractName = (string::npos == position)? fileName : fileName.substr(0, position);
Попробуй это:
Предполагая, что имя файла находится в строке.
string fileName = your file.
string newFileName;
for (int count = 0;
fileName[count] != '.';
count++)
{
newFileName.push_back(fileName[count]);
}
Это подсчитает буквы в вашем оригинальном имени файла и добавит их одну за другой в новую строку имени файла.
Есть несколько способов сделать это, но это один из основных способов сделать это.