![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
получить имя файла без расширения [D7, XP]
malyar © (2007-10-23 18:09:00)привет всем
народ подскажите как получить из имени файла с расширением
имя файла без расширения
s:='proga.exe' s:='pr.o.g.a.exe'
как правилино отсеч расширение у выше приведенных файлов?
существует ли функция (поиск вхождения строки в строку) где поиск начинается не сначала а с конца строки ?
Riply (2007-10-24 13:31:00) [1]Я бы попробовала так:
в одном цикле с конца FileName, делала бы проверку типа:
case FileName[i] of
'\': нет расширения - выходим;
':': зависит от того интересуют нас "поточные файлы или нет".
для обычных: нет расширения - выходим;
'.': фиксируем сколько символов в расширении, выходим;
else dec(i);
end;
Reindeer Moss Eater (2007-10-24 13:07:00) [2]Хорошо, будем использовать предварительное ExtractFileName.
Хотя я еще не сдаюсь.
Riply (2007-10-24 12:54:00) [3]>[27] Reindeer Moss Eater © (24.10.07 12:22)
Ой торопишся...
На такой файл : FileName := 'C:\MySuper.Puper.Dir\TestFile',
приведенный тобой код мне сообщает, что имя без расширения выглядит так: "TestF" :)
Reindeer Moss Eater (2007-10-24 12:22:00) [4]SetLength(FileNameWoExt,Length(FileName));
ZeroMemory(PChar(FileNameWoExt),Length(FileNameWoExt));
StrLCopy(PChar(FileNameWoExt),
PChar(Max(Integer(PChar(FileName)),succ(Integer(StrRScan(PChar(FileName),'\')))) ),
Abs(
StrRScan(PChar(FileName),'.')
-
PChar(Max(Integer(PChar(FileName)),succ(Integer(StrRScan(PChar(FileName),'\')))) )
)
);
:)
Riply (2007-10-24 11:48:00) [5]>[25] Reindeer Moss Eater © (24.10.07 11:21)
> Copy(FileName,1,Abs(StrRScan(PChar(FileName),'.') - PChar(FileName)));
Напартачим с таким файлом:
C:\MySuper.Puper.Directory\FileWithOutExt
:)
Reindeer Moss Eater (2007-10-24 11:21:00) [6]FileNameWoExt := Copy(FileName,1,Abs(StrRScan(PChar(FileName),'.') - PChar(FileName)));
megabyte (2007-10-24 10:47:00) [7]
> antonn © (23.10.07 18:43) [16]
>
> > Отсекаем с конца 4 символа и всего делов-то...
>
> .mpeg/.jpeg/.divx и тд :)
фишка в том, что, исходя из задачи, можно понять, какой длины будет расширение :Р *типа отмазался*
Германн (2007-10-24 01:22:00) [8]
> DVM © (24.10.07 00:08) [22]
>
>
> > Riply © (24.10.07 00:03) [21]
>
> так не честно
>
Не честно предлагать попробовать на своём компьютере имя файла Con. А [21] - это просто шутка, но увы. Лёгка была жизнь только при 8.3 :)
DVM (2007-10-24 00:08:00) [9]
> Riply © (24.10.07 00:03) [21]
так не честно
Riply (2007-10-24 00:03:00) [10]> [20] DVM © (23.10.07 22:55)
Споткнемся на: C:\MyDir\MyFile.txt:mydata
Правда, строго говоря, это не совсем файл, но имеет право на существование :)
DVM (2007-10-23 22:55:00) [11]function ExtractFileNameWoExt(const FileName : string) : string;
begin
Result := ExtractFileName(FileName);
Result := Copy( Result, 1, Length(Result) - Length(ExtractFileExt(Result)));
end;
Riply (2007-10-23 22:52:00) [12]> [6] Palladin © (23.10.07 18:19)
Такой некузяво обработает
C:\My.Super.Puper.Dir\Test.exe
:)
Anatoly Podgoretsky (2007-10-23 19:23:00) [13]> malyar (23.10.2007 18:09:00) [0]
ChangeFileExt
antonn (2007-10-23 18:43:00) [14]
> Отсекаем с конца 4 символа и всего делов-то...
.mpeg/.jpeg/.divx и тд :)
antonn (2007-10-23 18:43:00) [15]
> Reindeer Moss Eater © (23.10.07 18:38) [14]
для наглядности %)
malyar (2007-10-23 18:39:00) [16]thx
Reindeer Moss Eater (2007-10-23 18:38:00) [17]ок.
а вот это-то зачем?
P := Pos(Ext, Filename);
if P <> 0 then
на случай если расширения нет совсем?
так логичнее просто проверять на пустую строку саму Ext.
megabyte (2007-10-23 18:38:00) [18]Отсекаем с конца 4 символа и всего делов-то...
antonn (2007-10-23 18:29:00) [19]давайте сразу скажите, что там не так?
file.txt.ext.ext.txt - file.txt.ext.ext
proga.exeblablabla.exe - proga.exeblablabla
Reindeer Moss Eater (2007-10-23 18:27:00) [20]а если proga.exeblablabla.exe