Для чего здесь обрезается строка?

101
06 октября 2021, 18:40

Только не ругайтесь, пожалуйста. Я изучаю чужой код и некоторые моменты не понимаю.

public class PathToBaseDirectory : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string currentDirectory = System.Environment.CurrentDirectory;
            if (currentDirectory.EndsWith("\\bin\\Debug"))
            {
                int index = currentDirectory.IndexOf("\\bin\\Debug");
                currentDirectory = currentDirectory.Substring(0, index);
            }
            return currentDirectory + value.ToString();
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return "";
        }
    }

Мне не особо понятны следующие строки :

 int index = currentDirectory.IndexOf("\\bin\\Debug");
                currentDirectory = currentDirectory.Substring(0, index);

Обязательно ли это в своих проектах прописывать? что вообще происходит?

Answer 1

Скорее всего это какой-то костыль для запуска приложения из-под студии.

Обычно все, что нужно приложению, лежит в папке с результатами компиляции. В студии это обычно bin\Debug в папке проекта. Скорее всего тот, чей код вы изучаете, или не знал как скопировать дополнительный контент (через Copy to output directory в свойствах), или решил это не делать по каким-то своим причинам.

Поэтому под отладкой у вас приложение пытается выпрыгнуть в папку проекта и поискать файлы контента там (через обрезание bin\Debug). В релизе, скорее всего, файлы контента копировались к бинарникам вручную.

Нет, в своих проектах такое прописывать необязательно. Это костыль для какой-то местной ситуации. Правильно - помечать проектные файлы контента/данных, с которыми вам нужно работать, флагом Copy to output directory = true.

Answer 2

Вообще, это написано криво. В данном случае обрезается \bin\Debug в конце.

if (currentDirectory.EndsWith("\\bin\\Debug")) // Если текущая директория - дебаг
{
    int index = currentDirectory.IndexOf("\\bin\\Debug"); // найди индекс старта
    currentDirectory = currentDirectory.Substring(0, index); // возьми строку с начала до этого индекса
}

Вполне достаточно было бы написать

const string endsWith = @"\bin\Debug";
if (currentDirectory.EndsWith(endsWith))
{
    currentDirectory = currentDirectory.Substring(0, currentDirectory.Length - endsWith.Length);
}

Еще по-хорошему следует добавить #if DEBUG, ибо, скорее всего, это должно использоваться только под дебагом.

READ ALSO
MVC, проблема с выводом html

MVC, проблема с выводом html

Создал простое приложение mvc, в представлении (вьюхе) есть главный шаблон примерно такой:

102
Разветвление для чат-бота (ключевое слово-ответ)

Разветвление для чат-бота (ключевое слово-ответ)

Я хочу сделать чат-бота по типа: ключевое слово-ответЯ понимаю, как его реализовать, но структуризация вводит меня в ступор

219
Почему если указать data_seek один раз, то в следующий раз данные выведутся из другой строки?

Почему если указать data_seek один раз, то в следующий раз данные выведутся из другой строки?

У меня есть таблица, которая имеет столбцы number и balanceЯ хочу вывести данные, хранящиеся в них на страницу

169
Сохранение файла из $_FILES

Сохранение файла из $_FILES

Все доброго дня!

101