如何将C#SpecialFolder路径存储到SQLite数据库中?

时间:2019-06-26 06:41:47

标签: c# wpf sqlite

我正在使用WPF应用程序,但遇到了棘手的问题。

SQLite数据库中有一个名为“ OutputFolder”的TEXT字段,用于存储不同的文件夹路径(顾名思义,该文件夹会在其中生成某些输出的文件夹)。

我想在“ OutputFolder”中将特殊文件夹路径(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))保存到SQLite数据库中。

我要存储在数据库中的实际值

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

我没有选择使用任何其他目录或其他东西的选项。很清楚,我必须将此路径存储到数据库中。

我愿意添加新列以指定任何标志值或将路径标识为特殊文件夹的任何内容。

2 个答案:

答案 0 :(得分:1)

据我了解-您需要存储两种类型的绝对路径和一个包含特殊文件夹的路径。问题在于如何识别路径的类型,然后相应地进行处理。

如果您无法更改db数据结构(以添加其他字段),则可能是一种将有关特殊文件夹的信息注入路径的方法。

例如您可以使用无效(用于路径)字符标记注入的开始和结束。然后,您的路径应类似于:

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

当然,您必须在阅读时进行解析,如果找到了注入,则将其替换为真实路径。在我们的情况下,MyDocuments = 5,请参见Environment.SpecialFolder

答案 1 :(得分:0)

首先, Rekshino 的答案可能是实现这一目标的方法之一。

在我解决此问题的同时。

正如所提到的,

  

我愿意添加新列以指定任何标志值或任何其他   将路径标识为特殊文件夹。

已实施的解决方案

数据库字段:

OutputFolder =目录路径(静态路径或特殊文件夹下的剩余路径)

IsSpecialOutputFolder =标识当前路径中是否存在任何特殊文件夹的标志。

SpecialFolderId = Environment.SpecialFolder的枚举值。 (在我们的示例中,MyDocuments = 5)。我将默认值设置为-1,因为它不是Environment.SpecialFolder枚举中任何项目的值。

有关此enum的更多详细信息,请参见Environment.SpecialFolder

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.
}