Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建前确保文件名有效_C#_File_File Io - Fatal编程技术网

C# 创建前确保文件名有效

C# 创建前确保文件名有效,c#,file,file-io,C#,File,File Io,我正在以编程方式写入如下文件: file = new StreamWriter("C:\\Users\\me\\Desktop\\test\\sub\\" + post.title + ".txt"); file.Write(postString); file.Close(); 但是,有时程序会崩溃,因为文件名的非法字符出现在post.title中。像这样的字符一般的方法是为Path.GetInvalidFileNameChars()中的字符清除post.title值 这个类似的线程展示了如

我正在以编程方式写入如下文件:

file = new StreamWriter("C:\\Users\\me\\Desktop\\test\\sub\\" + post.title + ".txt");
file.Write(postString);
file.Close();

但是,有时程序会崩溃,因为文件名的非法字符出现在
post.title
中。像
这样的字符一般的方法是为
Path.GetInvalidFileNameChars()中的字符清除
post.title

这个类似的线程展示了如何为卫生目的进行字符串替换的方法:

如果链接失败,这里有一个很好的答案:

private static string MakeValidFileName( string name )
{
   string invalidChars = Regex.Escape( new string( Path.GetInvalidFileNameChars() ) );
   string invalidReStr = string.Format( @"[{0}]+", invalidChars );
   return Regex.Replace( name, invalidReStr, "_" );
}

如果它是由于StreamWriter构造函数上的异常而崩溃的(这似乎很可能),您可以简单地将其放在异常捕获块中

这样,您就可以让您的代码处理这种情况,而不仅仅是陷入一堆

换句话说,类似于:

try {
    file = new StreamWriter ("C:\\Users\\me\\sub\\" + post.title + ".txt");
catch (Exception e) {  // Should also probably be a more fine-grained exception
    // Do something intelligent, notify user, loop back again 
}
在修改文件名以使其可接受方面,回答了大量文件系统中允许的字符列表

基本上,(
文件名限制比较
)中的第二个表显示了什么是允许的,什么是不允许的


您可以使用正则表达式替换来确保将所有无效字符转换为有效字符,例如

除非您在公司内部进行一些内部开发,否则您应该使用用户
环境.SpecialFolder.Desktop
,而不是硬编码路径。这是一个很好的答案,请记住警告:“此方法返回的数组不保证包含文件名和目录名中无效的完整字符集。”-您可能需要根据文件系统类型进行调整。