Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2011, 19:06   #1
fezilk25
Форумчанин
 
Регистрация: 01.08.2010
Сообщений: 124
По умолчанию Имя сохраняемого файла

Суть программы - скачивание некоторых файлов, например музыки. имена сохраняемых файлов берутся из названия песни. но там могут быть запрещенные символы.
Есть ли функция для удаления тех символов, которые запрещены в имени файла?
Если нет, то какие именно символы запрещены, кроме > < | ? * / \ : " ?
В FAT и NTFS они вроде разные, как тогда узнать файловую систему определённого каталога?
fezilk25 вне форума Ответить с цитированием
Старый 25.11.2011, 20:25   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

имя файла тебе отдаёт сервер. И пока файл на сервере у тебя есть только его имя.

1. Сливай файл во временной файл(Например temp#<номер закачки>.tmpd).
2. из полученной строки с сервера, вырезай все левые знаки.
3. Закаченный файл переименовывай в новое имя.
Человек_Борща вне форума Ответить с цитированием
Старый 25.11.2011, 20:39   #3
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Причем тут файловая система? Чтобы убрать из строки запрещенные символы, делайте примерно так:
Код:
procedure DeleteStopSymbols(var AText:AnsiString);
const
  cntStopSym:AnsiString='><|?*/\:"';
var
  i,j:Integer;
begin
  for i:=1 to Length(cntStopSym) do
  begin
    j:=Pos(cntStopSym[i],AText);
    Delete(AText,j,1);
  end;
end;
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 24.01.2012, 12:35   #4
Marinesku
Пользователь
 
Регистрация: 01.12.2009
Сообщений: 13
По умолчанию

for i:=1 to length(Text) Do
begin
i:=i+1;
begin
if Text[i]='/' or Text[i]='?'
then Delete(Text, i, 1);
end;
end;

То есть проходимся циклом по переменной от начала до конца, и, встретив ненужное, удаляем.
Marinesku вне форума Ответить с цитированием
Старый 25.01.2012, 10:04   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Marinesku
То есть проходимся циклом по переменной от начала до конца, и, встретив ненужное, удаляем.
извините, у Вас написан глюкавый неправильный корявый код. Категорически бы не рекомендовал им пользоваться!

смотри пост #3. там другой алгоритм, но, в отличие от вашего, РАБОЧИЙ.

p.s. ну, ещё можно так сделать:
Код:
procedure DeleteStopSymbols(var AText:AnsiString);
const
 cntStopSym = ['>','<','|','?','*','/','\',':','"'];
var
  i : Integer;
begin
  for i:=Length(AText) downto 1 do
    if AText[i] in  cntStopSym then Delete(AText, i , 1);
end;

__
а вообще, конечно, это некропостерство...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить имя файла из ссылки(в конце ссылки нет имени файла) Человек_Борща Работа с сетью в Delphi 11 05.06.2011 15:15
Имя файла Ra88 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 08.07.2010 08:48
idhttp имя файла KoBRaAndrey Работа с сетью в Delphi 3 31.05.2010 10:16
имя файла ? somwan Общие вопросы C/C++ 1 18.03.2009 17:46
Изменить имя файла. Манжосов Денис :) Помощь студентам 8 05.05.2008 00:12