C# санируют имя файла

Предупреждение: mysql_fetch_array () ожидает, что параметр 1 является ресурсом, boolean given

Прежде всего:

Пожалуйста, не используйте mysql_* функции в новом коде . Они больше не поддерживаются и официально устарели . См. Красную рамку ? Узнайте о подготовленных операторах и используйте PDO или MySQLi - в этой статье , которые помогут вам решить, какой из них. Если вы выберете PDO, вот хороший учебник .


Это происходит, когда вы пытаетесь получить данные из результата mysql_query, но запрос

Это предупреждение и не остановит скрипт, но сделает вашу программу неправильной.

Вам нужно проверить результат, возвращенный mysql_query, на

$res = mysql_query($sql);
if (!$res) {
   die(mysql_error());
}
// after checking, do the fetch

Вопросы, относящиеся

Связанные ошибки:

Другие функции mysql*, которые также ожидают, что ресурс результата mysql в качестве параметра приведет к той же ошибке для такой же причина.

158
задан Soner Gönül 30 March 2013 в 08:07
поделиться

3 ответа

Ваш код был бы более чистым, если бы Вы добавили каталог и имя файла вместе и санировали это вместо того, чтобы санировать их независимо. Что касается очистки далеко: просто возьмите 2-й символ в строке. Если это равно "replacechar", замените его двоеточием. Так как это приложение для Вашего собственного использования, такое решение должно быть совершенно достаточным.

0
ответ дан Brian 23 November 2019 в 21:37
поделиться

Я думаю, что проблема состоит в том, что Вы сначала звоните Path.GetDirectoryName на плохой строке. Если это имеет символы неимени файла в нем.Net не может сказать, какие части строки являются каталогами и бросками. Необходимо сделать сравнения строк.

Принятие это - только имя файла, которое плохо, не весь путь, попробуйте это:

public static string SanitizePath(string path, char replaceChar)
{
    int filenamePos = path.LastIndexOf(Path.DirectorySeparatorChar) + 1;
    var sb = new System.Text.StringBuilder();
    sb.Append(path.Substring(0, filenamePos));
    for (int i = filenamePos; i < path.Length; i++)
    {
        char filenameChar = path[i];
        foreach (char c in Path.GetInvalidFileNameChars())
            if (filenameChar.Equals(c))
            {
                filenameChar = replaceChar;
                break;
            }

        sb.Append(filenameChar);
    }

    return sb.ToString();
}
2
ответ дан Dour High Arch 23 November 2019 в 21:37
поделиться

Чтобы очистить имя файла, вы можете сделать это

private static string MakeValidFileName( string name )
{
   string invalidChars = System.Text.RegularExpressions.Regex.Escape( new string( System.IO.Path.GetInvalidFileNameChars() ) );
   string invalidRegStr = string.Format( @"([{0}]*\.+$)|([{0}]+)", invalidChars );

   return System.Text.RegularExpressions.Regex.Replace( name, invalidRegStr, "_" );
}
293
ответ дан 23 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

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