Как удалить недопустимые символы из пути и имен файлов?

(Rails 3)

Поскольку я вызываю почтовую программу следующим образом:

CustomerMailer.customer_auto_inform(@form).deliver

В классе CustomerMailer у меня есть частный метод:

def init_email_account(shop_mail)
  ActionMailer::Base.raise_delivery_errors = true
  ActionMailer::Base.smtp_settings = {
    :address              => shop_mail.address,
    :port                 => shop_mail.port,
    :domain               => shop_mail.domain,
    :user_name            => shop_mail.user_name,
    :password             => shop_mail.password,
    :authentication       => shop_mail.authentication.name,
    :enable_starttls_auto => shop_mail.enable_starttls_auto
  }
end

Before вызывающая почта (), которая отправляет электронную почту, вы должны вызвать частный метод init_email_account для заполнения smtp_settings из базы данных. shop_mail - это модель, в которой хранятся данные о настройках учетной записи электронной почты.

HTH

401
задан Peter Mortensen 5 May 2010 в 09:51
поделиться

5 ответов

Попробуйте что-то вроде этого вместо этого;

string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?";
string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());

foreach (char c in invalid)
{
    illegal = illegal.Replace(c.ToString(), ""); 
}

, Но я должен согласиться с комментариями, я, вероятно, попытался бы иметь дело с источником недопустимых путей, вместо того, чтобы попытаться исказить недопустимый путь к законному, но вероятно непреднамеренному.

Редактирование: Или потенциально 'лучшее' решение, с помощью Regex.

string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?";
string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
illegal = r.Replace(illegal, "");

однако, вопрос напрашивается сам собой, почему Вы делаете это во-первых.

461
ответ дан Matthew Scharley 5 May 2010 в 09:51
поделиться

Я думаю, что намного легче проверить использование regex и определение, которое символы позволяются, вместо того, чтобы пытаться проверить на все неверные символы. См. эти ссылки: http://www.c-sharpcorner.com/UploadFile/prasad_1/RegExpPSD12062005021717AM/RegExpPSD.aspx http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/csharp_0101.html

кроме того, сделайте поиск "редактора регулярного выражения" s, они помогают много. Существуют некоторые, вокруг которых даже производит код в c# для Вас.

3
ответ дан Sandor Davidhazi 5 May 2010 в 09:51
поделиться

Я использую регулярные выражения для достижения этого. Во-первых, я динамично создаю regex.

string regex = string.Format(
                   "[{0}]",
                   Regex.Escape(new string(Path.GetInvalidFileNameChars())));
Regex removeInvalidChars = new Regex(regex, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.CultureInvariant);

Тогда я просто называю removeInvalidChars. Замена, чтобы сделать находку и замену. Это может, очевидно, быть расширено для покрытия символов пути также.

16
ответ дан Jeff Yates 5 May 2010 в 09:51
поделиться

Для начала, Trim только удаляет символы с начала или конца строки . Во-вторых, необходимо оценить, если Вы действительно хотите удалить наступательные символы, или перестать работать быстро и позволить пользователю знать, что их имя файла недопустимо. Моим выбором является последний, но мой ответ должен, по крайней мере, показать Вам, как сделать вещи право И неправильный путь:

вопрос о StackOverflow, показывающий, как проверить, является ли данная строка именем правильного файла . Обратите внимание, что можно использовать regex от этого вопроса удалить символы с заменой регулярного выражения (если действительно необходимо сделать это).

18
ответ дан Community 5 May 2010 в 09:51
поделиться

Выдайте исключение.

if ( fileName.IndexOfAny(Path.GetInvalidFileNameChars()) > -1 )
            {
                throw new ArgumentException();
            }
5
ответ дан mirezus 5 May 2010 в 20:51
поделиться
  • 1
    @aioobe зафиксировал формулировку для использования " экземпляры... type" для разъяснения этого. – Victor Sorokin 3 April 2012 в 10:52
Другие вопросы по тегам:

Похожие вопросы: