下划线被反斜杠包围

时间:2019-02-28 15:56:40

标签: c# unity3d

我正在尝试连接一些文件名组成部分,以确保如果我已经有一个同名文件,新文件将得到一个带下划线和递增计数器的新名称。

我写了以下我认为应该起作用的东西:

string tempPath = Path.Combine(Application.dataPath, "MyValues");
tempPath = Path.Combine(tempPath, "_");
tempPath = Path.Combine(tempPath, counter.ToString() + ".csv");

当我发现实际上没有文件被保存后,我加入了Debug.Log(tempPath)来查看其返回的内容,令人惊讶的是,我得到了以下内容:

MyUnityProject/Assets\MyValues\_\0.csv

首先,为什么会有\而不是/

此外,下划线周围的反斜杠来自哪里?

最后,不是手动删除它们,我如何找回正确的语法?例如MyValues_0.csvMyValues_1.csv等...

2 个答案:

答案 0 :(得分:2)

通过查看https://referencesource.microsoft.com/#mscorlib/system/io/path.cs,16ed6da326ce4745

Path类的源代码

我们可以看到方法Combine为每对字符串路径调用方法CombineNoChecks并返回以下内容:

return path1 + DirectorySeparatorCharAsString + path2;

DirectorySeparatorCharAsString的值为:

internal const string DirectorySeparatorCharAsString = "\\";

该类中还定义了其他分隔符,因此您可以根据自己的运行平台获得正确的分隔符:

// Platform specific alternate directory separator character.  
// This is backslash ('\') on Unix, and slash ('/') on Windows 
// and MacOS.
public static readonly char AltDirectorySeparatorChar = '/';

因此,我不必担心该方法返回什么,它应该可以正常工作。

答案 1 :(得分:2)

\/是否用于构建有效路径是why you even use Path.Combine的全部原因:

  • 它使用当前Plattform / OS理解的方法将两个字符串组合到路径,从而使其平台独立。
  • 它还添加了一些额外的检查,以检查所提供的字符串是否为有效的路径摘要,从而使它比简单的连接更节省使用。

您做什么

string tempPath = Path.Combine(Application.dataPath, "MyValues");
tempPath = Path.Combine(tempPath, "_");
tempPath = Path.Combine(tempPath, counter.ToString() + ".csv");

假设MyValue_是文件夹名称。

Path.Combine仅用于合并文件夹,而最终文件名用于合并文件名本身。


您要做的是通过字符串连接构建完整的文件名,例如使用string.Format

string filename = string.Format("MyValues_{0}.csv", counter.ToString());

$ (string interpolation)

string filename = $"MyValues_{counter.ToString()}.csv";

这只是更简单的写作方式

string filename = "MyValues_" + counter.ToString() + ".csv";

,然后仅使用Path.Combine将完整的文件名与给定的系统文件夹路径组合在一起,例如

string tempPath = Path.Combine(Application.dataPath, filename);