Unity3d:处理文件名中的空格

时间:2018-02-13 06:20:35

标签: c# unity3d create-directory

如何打开/创建名称中包含空格的文件?我有以下代码:

FILENAME = (GameInfo.gameTitle.ToString() + " - " + month + "-" + day + "-" + year + "-" + hour + "-" + minute + "-" + second);
        // The dump file holds all the emotion measurements for each frame. Put in a separate file to not clog other data.
        DUMPNAME = FILENAME + "-EMOTION-DUMP.txt";
        FILENAME += ".txt";

        Debug.Log("FILENAME==== " + FILENAME);
        FileInfo file = new FileInfo(FILENAME);
        file.Directory.Create(); // If it already exists, this call does nothing, so no fear.

此处GameInfo.gameTitle.ToString()返回"某些游戏名称"因此得到的文件名是"有些:游戏名称 - 2-12-2018-23-14-10.txt"。在执行这段代码时,一个名为" Some"的新文件夹。创建而不是名称为&#34的新文本文件;某些游戏名称 - 2-12-2018-23-14-10.txt"。如何转义文件名中的空格? 我尝试使用WWW.EscapeURL并且它有效,但它会在预期之间添加奇怪的%字符。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:4)

无需创建FileInfo,请使用

System.IO.Directory.CreateDirectory("./"+FILENAME); // with a fixed file name

文件名中的:会使create命令混乱。在文件名中禁止使用多个字符,在尝试保存之前应删除它们:

var forbidden = new char[] { '/', '\\', '?', '*', ':', '<', '>', '|', '\"' };

或者更好地使用Path.GetInvalidPathChars(),但要注意

  

不保证从此方法返回的数组包含在文件和目录名称中无效的完整集字符。完整的无效字符可能因文件系统而异。例如,在基于Windows的桌面平台上,无效路径字符可能包括ASCII / Unicode字符1到31,以及quote(“),小于(&lt;),大于(&gt;),pipe(|),退格(\ b),null(\ 0)和制表符(\ t)。

你可以试试这个:

static string FixFileName (string fn)
{
  var forbidden = new char[] { '/', '\\', '?', '*', ':', '<', '>', '|', '\"' };

  var sb = new StringBuilder (fn);    
  for (int i = 0; i < sb.Length; i++)
  {
    if ((int)sb[i] < 32 || forbidden.Contains (sb[i]))
      sb[i] = '-';
  }

  return sb.ToString ().Trim();
}