【问题标题】:How to store C# SpecialFolder path into SQLite database?如何将 C# SpecialFolder 路径存储到 SQLite 数据库中?
【发布时间】:2019-11-08 00:52:39
【问题描述】:

我正在开发一个 WPF 应用程序,但遇到了一个棘手的问题。

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

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

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

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

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

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

【问题讨论】:

  • 我不关注这个问题。当你 + "\\temp" 到那个 getfolderpath 时,你会得到一个字符串。答案不就是用一些键将它存储在 OutputFolder 中以便您可以再次找到它吗?但我不明白你为什么需要存储它。
  • @Andy 感谢您的回复。 1. 我在 C# 中使用 getfolderpath + "\\temp"。目前是我用于测试的静态代码。但是在同一个数据库字段中还有其他路径。 2. 有一个第三方服务会在该特定位置生成结果,我无法更改它。它的预编译服务。
  • 我不明白的是为什么您不只是将生成的路径写入数据库?
  • @Hille 没有生成路径。我需要从数据库中读取路径并将其用于应用程序。在 DB 中,“OutputFolder”字段包含静态路径和特殊文件夹路径作为值。我希望你得到。我愿意接受其他问题。
  • 您要存储Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\temp"; 还是C:\User\...\temp

标签: c# wpf sqlite


【解决方案1】:

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

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

例如您可以使用无效(用于路径)字符来标记注入的开始和结束。您的路径应如下所示:

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

当然,在读取时,您必须进行解析,如果发现注入,则将其替换为真实路径。在我们的例子中 MyDocuments = 5 请参见 Environment.SpecialFolder

【讨论】:

  • 感谢您的回复。你完全明白我需要什么!。
【解决方案2】:

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

我解决了这个问题。

如前所述,

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

已实施的解决方案

数据库字段:

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

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

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

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

用户界面:

代码隐藏信息:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2012-07-17
    • 2019-07-28
    • 2012-01-18
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多