如何使用非法字符?

时间:2019-03-11 20:46:03

标签: c#

public void CreateCertificate()
    {

        File.Create($" 
        {@"C:\Users\Director\Documents\TestCertApp\TestSub\" + thisYear + 
        " Certificates- " + certType + "\""}{myFileName}.ppt", 1 , 
        FileOptions.None);
    }

因此,我需要在certype和文件名之间加反斜杠,以表明它属于文件夹内而不是文件夹内。它说它是非法字符,但是如果没有文件,我如何将其保存在文件夹中?

2 个答案:

答案 0 :(得分:1)

根据您编写的代码,将生成的文件路径是(基于我自己对变量的替换):

String thisYear = "2019";
String certType = "UnderGrad";
String myFileName = "myfile";
String fileToCreate = $"{@"C:\Users\Director\Documents\TestCertApp\TestSub\" + thisYear + " Certificates- " + certType + "\""}{myFileName}.ppt";

Debug.Print(fileToCreate);

将为您提供此输出:

C:\Users\Director\Documents\TestCertApp\TestSub\2019 Certificates- UnderGrad"myfile.ppt

如果您注意到"的文件名部分前面有一个myfile.ppt-这是非法字符的来源。

如果您使用此代码段生成路径:

String basePath = @"C:\Users\Director\Documents\TestCertApp\TestSub\";
String certificateFolder = $"{thisYear} Certificates- {certType}";
String correctFilePath = Path.Combine(basePath, certificateFolder, $"{myFileName}.ppt");

Debug.Print(correctFilePath);

这将导致输出:

C:\Users\Director\Documents\TestCertApp\TestSub\2019 Certificates- UnderGrad\myfile.ppt

此版本具有\,其中先前的代码具有",并且不再是非法的,但符合您将文件写入文件夹中的要求。

还有其他需要注意的地方:

您可能要使用Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);来获取用户的MyDocuments文件夹的路径。

答案 1 :(得分:0)

好吧,简短的答案是您不能在路径或文件名中使用非法字符。否则,这将不是非法的。 :)

但是似乎这里的问题是,尽管您实际上添加的是反斜杠(\)字符,但实际上您是添加的双引号(")字符。因此,如果一切正常,您可以将"\""替换为"\\",它应该可以工作。


问题的一部分还在于,您正在对字符串插值进行某种奇怪的组合,这使得代码真的很难阅读。

相反,您可以仅使用字符串插值来简化字符串(我必须在下面使用级联来防止水平滚动,但可以将其删除):

string filePath = $@"C:\Users\Director\Documents\TestCertApp\TestSub\{thisYear} " + 
                  $@"Certificates- {certType}\{myFileName}.ppt";

但更好的方法是使用Path.Combine方法以及一些变量,以使意图非常明确:

var rootDir = @"C:\Users\Director\Documents\TestCertApp\TestSub"
var fileDir = $"{thisYear} Certificates- {certType}"
var fileName = "{myFileName}.ppt";

var filePath = Path.Combine(rootDir, fileDir, fileName);