Как сохранить путь C # SpecialFolder в базе данных SQLite? - PullRequest
0 голосов
/ 26 июня 2019

Я работаю над приложением WPF и застрял в хитрой проблеме.

В базе данных SQLite есть поле TEXT с именем «OutputFolder», в котором хранятся различные пути к папкам (поскольку имя указывает на папку, в которой генерируется какой-либо вывод).

Я хочу сохранить специальный путь к папке (Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) в SQLite базе данных в «OutputFolder».

Фактическое значение, которое я хочу сохранить в базе данных

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\temp";

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

Я открыт, чтобы добавить новый столбец для указания любого значения флага или чего-либо, что идентифицирует путь как специальную папку.

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Как я понял - вам нужно хранить оба типа путей абсолютные и один, содержащий специальные папки. Проблема в том, как распознать тип пути и затем обработать его соответствующим образом.

Если вы не можете изменить структуру данных БД (добавить дополнительные поля), то, вероятно, это способ внедрить информацию о специальной папке в путь.

например. Вы можете использовать недопустимые (для пути) символы, чтобы отметить начало и конец внедрения. Ваш путь должен выглядеть следующим образом:

var injectedPath = "?5?\\temp";

Конечно, при чтении вы должны проанализировать, и если найденная инъекция заменит ее на реальный путь. В нашем случае MyDocuments = 5 см. Environment.SpecialFolder .

0 голосов
/ 28 июня 2019

Прежде всего, ответ Рекшино может быть одним из способов достижения этого.

Значит, пока я это решил.

Как уже упоминалось в вопросе,

Я открыт, чтобы добавить новый столбец, чтобы указать любое значение флага или все, что определить путь как специальную папку.

Реализованное решение

Поля БД:

OutputFolder = Путь к каталогу (статический путь или оставшийся путь в специальной папке)

IsSpecialOutputFolder = Флаг, определяющий, где в текущем пути есть какая-либо специальная папка или нет.

SpecialFolderId = значение Enum Environment.SpecialFolder. (В нашем случае MyDocuments = 5). Я установил значение по умолчанию -1, поскольку это не значение какого-либо элемента в Environment.SpecialFolder перечислении.

См. Environment.SpecialFolder для более подробной информации об этом enum.

UI:

enter image description here

Код информации:

DropDown, чтобы дать больше Environment.SpecialFolder выбора пользователю. Привязать к нему следующие Dictionary<int, string>. В дальнейшем это позволит добавлять больше предметов.

public static Dictionary<int, string> AllowedSpecialFolders = new Dictionary<int, string>() 
{
    {0,"Desktop" }, {5, "MyDocuments"}
};

CheckBox проверка / снятие отметки делает DropDown включенным и отключенным.

Реализована правильная проверка, когда введен специальный путь к папке и введен статический путь. Пример: в случае специального пути, оставшийся путь к каталогу не должен содержать никакого корневого каталога.

if (IsSpecialOutputFolder)
{
    // ALL OTHER PROCESSING AND VALIDATIONS HERE.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...