![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка имени файла [D7, WinXP]
Ilg © (2005-06-21 21:32:00)Здравствуйте!
Есть ли возможность проверить правильность имени файла до сохранения или чтения, т. е., например, не содержит ли имя запрещенных символов. (Что-то типа IsValidIdent)?
Заранее, Большое Спасибо!
-=XP=- (2005-06-22 09:46:00) [1]"Чтобы почувствовать вкус груши, надо ее попробовать." (С) Кажись-это-был-Конфуций
Anatoly Podgoretsky (2005-06-22 08:25:00) [2]Sulimxar © (21.06.05 23:15) [4]
Это не ТЗ, в ТЗ должно быть дано полное толкование правильность имени
Которое и на фиг не нужно, поскольку ничего не дает ни гарантии чтения, ни гарантии записи и даже ни гарантии видимости.
Faraday (2005-06-22 07:34:00) [3]Для чтения - FileExists(PathToFile).
Для записи удобнее юзать диалог SaveFile - он сам все проверит.
Virgo_Style (2005-06-21 23:15:00) [4]Помнится, была такая тема, но найти ее я не смог, если хочешь - поищи, может, тебе повезет =)
Насколько я помню, остановились на том, что точный результат можно получить только экспериментально. К примеру, 'A:\file.txt' - корректное имя? А если диска нет в дисководе? А если есть, но защищен от записи? А если на нем места не хватит? И так далее в том же духе.
Если же нужна именно предпроверка на корректность имени - то, видимо, нужно что-то вроде [1].
Sulimxar (2005-06-21 23:15:00) [5]2ANB
В ТЗ сказано "проверить правильность имени файла до сохранения или чтения" ;-) А то может у него диск для записи закрыт...
Ну а вообще так пожалуй действительно все и делают :-)
ANB (2005-06-21 23:11:00) [6]Я обычно пробую его создать и проверяю на ошибку. Если создался - можно удалить. Чтобы не мешал - можно завести пустой каталог в каталоге программы.
Sulimxar (2005-06-21 22:57:00) [7]Вроде не встречал, но накрайняк можно сделать что-то вроде этого
(библиотечная функция наверняка будет делаеть что-то наподобие, хоть конечно это "тупо влоб")
function IsValidName(s: string): boolean;
begin
Result := true;
len := Length(s);
if len > 0 then
begin
i := 0;
repeat
inc(i);
Result := not (s[i] in ['*', '?' {, другие запрещённые символы}]);
until not Result or (i = len)
end;
end;
вобщем что-то в таком духе...