2016-01-23 39 views
0

我有一个字符串替换的“简单”问题。在字符串C中用“\”替换''#

我有遵循类似的系统,这个字符串的未知量:

“W8D6m \ 2alNzPUW2d2m4V9EksLHg =”

注意“\”在字符串中,我想什么do是让程序忽略它,不把它当作转义字符。错误正在从这个代码

File.WriteAllText(Application.StartupPath + "\\Users\\" + UniqueID, NewUser.ToString()); 

的UniqueID的是,认为是引发错误,因为它是思维斜线两边都是路径的一部分的部分字符串变量抛出。所以,我想通过这样做来替代它:

UniqueID = UniqueID.Replace(@"\", "\\"); 

但是这并不能工作,所以我想弄清楚,我怎样可以使程序忽略,如果该字符串包含“\”(它需要存在,所以一个简单的删除不能成为解决方案)

如果这一切都是混乱的,我需要做的是,在“W8D6m \ 2alNzPUW2d2m4V9EksLHg =”认为它是一个完整的路径,因为它是一个文件名,而不是一个文件夹。我希望这是一个文件的名称。一个例子是此http://prntscr.com/9tm9ed

+0

用“☺”之类的字符串编写它,然后在读取它时将其转换回来可能会诀窍 – Sakura

回答

7

问题在于,您试图将反斜线存储为文件名,而不是可能。如果你能这样做,计算机如何知道你是否试图访问目录或文件?

您最好的选择是用另一个字符替换反斜杠。您似乎在使用standard Base64 alphabet,所以我会建议字符“ - ”,因为它是一个不用作Base64编码一部分的常用字符。

uniqueID.Replace(@"\", "-"); 

即字符可以通过一吨的其它字符(* ._〜等)未在正规的Base64使用虽然代替。

尽管试图解释它时,确保用反斜杠代替字符!

+0

非常适合这里唯一的解决方案。谢谢。 – Jalomba

0

在此字符串\的问题是,当您连接:

<Startup>\Users\W8D6m\2alNzPUW2d2m4V9EksLHg= 

它与以下组件的新路径:

<Startup> \ Users \ W8D6m \ 2alNzPUW2d2m4V9EksLHg= 

你不应该使用*()\等这些字符对构造文件/文件夹名称有特殊意义。

0

你简单的文件名中不能有“\”。写一个像“☺”这样的特殊字符串,然后在阅读时将它转换回来可能会诀窍

+0

是,替换'\',但不是您建议的方式 - 您不能保证底层文件系统是基于Unicode的(NTFS是,FATxx不是 - 你甚至可能不在Windows上) - 所以使用像☺这样的特殊Unicode字符是不合适的。 –

+0

@MikeInsch谢谢,这个消息对我来说。 – Sakura

0

这是保证给你一个正确的文件名,无论输入的解决方案:

static string GetValidFileName(string data) 
{ 
    var bytes = System.Text.Encoding.UTF8.GetBytes(@"W8D6m\2alNzPUW2d2m4V9EksLHg="); 
    return Convert.ToBase64String(bytes).Replace("/", "_"); 
} 

注意,仅更换反斜杠并不能保证有效的文件名,因为有其他字符是无效的根据Path.GetInvalidPathChars()阵列。

用另一个字符串替换输入字符串中的反斜杠可能会引起冲突, "hello\world".Replace('\','-')为您提供了与"hello-world"相同的输出。

请注意,您可能仍然希望检查路径是否过长,某些API会将路径中的字符数限制为260个字符。