在datagridviewdatarow中从数据库中检索带有转义字符的文件路径

本文关键字:转义字符 文件 路径 检索 datagridviewdatarow 数据库 | 更新日期: 2023-09-27 18:08:15

我在MS Access数据库文件中存储各种数据,并将其填充到dataGridView中。其中一列是存储文件位置的字段。如果我加载数据库文件,可以看到它被存储为

D:'test'1.txt

现在我尝试使用下面的

检索它
foreach (DataRow row in dataTable.Rows)
{
     string Location = row["file_location"].ToString();
}

当我检查调试监视窗口时,我可以看到string Location实际上是D:''test''1.txt,现在我明白它正在添加'作为转义字符,但我不确定如何让我的string Location实际保持正确的路径,而不是转义路径。

我尝试以几种方式添加逐字字符串文字,但我不确定它是否会以我所读到的方式影响它,特别是如果它已经从数据库文件中取出,或者即使我把它放在正确的位置。

我尝试了下面的两个选项,但我都不相信它们会起作用,最后它们都没有起作用。

string Location = @"";
Location = row["file_location"].ToString();

string Location = @row["file_location"].ToString();
希望有人能帮我解决这个问题。我读了很多StackOverflow的文章,我似乎找不到一些东西,以一种我能理解的方式谈论我的具体问题

在datagridviewdatarow中从数据库中检索带有转义字符的文件路径

逐字字符串(在这个stackoverflow问题中讨论过)实际上是用于编译时的字面量,对于在运行时赋值根本没有用。

看起来你唯一担心的转义字符是反斜杠,所以一个非常快速的解决问题的方法是:

string Location = row["file_location"].ToString().Replace("''","'");

当然可能有更优雅的方式。

更新:

如前所述,您可能没有理解手表窗口。不管实际值是多少,这些字符串都会被转义。考虑:

    static void Main(string[] args)
    {
        watchisescaping();
        Console.ReadKey();
    }
    static void watchisescaping()
    {
        string location = @"c:'dim'bulbs";
        Console.WriteLine(location);
        Console.ReadKey();
    }

观察窗口显示位置为c:''dim''bulbs,但控制台输出应为c:'dim'bulbs。当您在数据网格中查看字符串时,您确定它确实仍然被转义了吗?