【问题标题】:C# Save file with "/" in nameC# 以“/”的名称保存文件
【发布时间】:2017-02-16 13:57:09
【问题描述】:

文件名包含例如Legend/Dery//时代

File.WriteAllBytes("/Pictures" + FileName, buffer);

我无法保存文件,因为“/”被视为路径,我也无法删除“/”,因为我需要它进行进一步处理。有没有办法保存这样的文件?

【问题讨论】:

  • 文件名不能包含斜线字符。这是文件系统的限制。
  • 不使用“/”做进一步处理,能不能用其他字符做进一步处理? illegal file name for different OS有讨论
  • 您能解释一下您要做什么吗?为什么不能使用其他符号?为什么你需要抛出一个带有一些分割标记的字符串?
  • 我将替换非法字符。我不想浪费不必要的计算能力,但我认为这是唯一的方法

标签: c# file filenames


【解决方案1】:

你运气不好。正斜杠不能是文件名的一部分。

您需要以某种方式转义它(即更改名称但提供一种将其改回的方法),但实际上并没有传统的方法。

我看到% 用于此目的,%% 用于表示单个 %%f 表示正斜杠,%b 表示反斜杠等。

【讨论】:

  • 那真是太糟糕了:/感谢您的及时回复。我将替换非法字符。 :) 我不想浪费不必要的计算能力,但我认为这是唯一的方法
【解决方案2】:

rules for names and folders defined by Microsoft 表示你不能这样做。

【讨论】:

    【解决方案3】:

    我建议在保存文件和尝试访问文件时对输入进行规范化,而不是转义:

    //replace all illegal characters with regex (with a dash):
    new Regex(@"[<>:""/\\|?*]").Replace("Inpu|t","-")
    
    //Or just replace all non alpha numeric characters (with a dash): 
    new Regex(@"[^a-zA-Z0-9\-]").Replace("Inpu|t","-")
    

    这样您将始终拥有干净的文件和文件夹名称,而不必担心非法名称。

    【讨论】:

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