public void CreateCertificate()
{
File.Create($"
{@"C:\Users\Director\Documents\TestCertApp\TestSub\" + thisYear +
" Certificates- " + certType + "\""}{myFileName}.ppt", 1 ,
FileOptions.None);
}
因此,我需要在certype和文件名之间加反斜杠,以表明它属于文件夹内而不是文件夹内。它说它是非法字符,但是如果没有文件,我如何将其保存在文件夹中?
答案 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);