我需要一种强大而简单的方法来从简单的字符串中删除非法路径和文件字符.我使用了下面的代码,但它似乎没有做任何事情,我错过了什么?
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string illegal = "\"M<>\"\\a/ry/ h**ad:>> a\\/:*?\"<>| li*tt|le|| la\"mb.?";
illegal = illegal.Trim(Path.GetInvalidFileNameChars());
illegal = illegal.Trim(Path.GetInvalidPathChars());
Console.WriteLine(illegal);
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想在我的应用程序中包含批处理文件重命名功能.用户可以键入目标文件名模式和(在替换模式中的一些通配符之后)我需要检查它是否是Windows下的合法文件名.我试过使用正则表达式,[a-zA-Z0-9_]+但它不包括来自各种语言的许多国家特定字符(例如变音符号等).做这种检查的最佳方法是什么?
我只是想知道:我正在寻找一种方法来验证给定路径是否有效. (注意:我不想检查文件是否存在!我只想证明路径的有效性 - 所以如果文件可能存在于该位置).
问题是,我在.Net API中找不到任何东西.由于Windows支持的许多格式和位置,我宁愿使用MS-native.
由于该功能应该能够检查:
- 相对路径(./)
- 绝对路径(c:\ tmp)
- UNC-Pathes(\ some-pc\c $)
- NTFS限制,如完整路径1024个字符 - 如果我没有错误超过路径将使许多内部Windows功能无法访问文件.用Explorer重命名它仍然有效
- 卷GUID路径:"\?\ Volume {GUID}\somefile.foo
有没有人有这样的功能?
我试图确定用户输入的字符串是否有效表示文件夹的路径.有效,我的意思是格式正确.
在我的应用程序中,该文件夹代表安装目标.提供的文件夹路径是有效的,我想,以确定是否该文件夹存在,并创建它,如果它没有.
我目前正在使用IO.Directory.Exists( String path ).我发现这很好用,除非用户没有正确格式化字符串.发生这种情况时,此方法将返回false,表示该文件夹不存在.但这是一个问题,因为我之后将无法创建该文件夹.
从我的谷歌搜索我发现一个建议使用正则表达式来检查格式是否正确.我没有正则表达式的经验,我想知道这是否是一种可行的方法.这是我发现的:
Regex r = new Regex( @"^(([a-zA-Z]\:)|(\\))(\\{1}|((\\{1})[^\\]([^/:*?<>""|]*))+)$" );
return r.IsMatch( path );
Run Code Online (Sandbox Code Playgroud)
将正则表达式测试结合起来Directory.Exists(),给我一个足够好的方法来检查路径是否有效以及它是否存在?我知道这会因操作系统和其他因素而异,但该程序仅针对Windows用户.
我想验证文件名及其完整路径.我尝试了下面的某些正则表达式,但没有一个正常工作.
^(?:[\w]\:|\\)(\\[a-z_\-\s0-9\.]+)+\.(txt|gif|pdf|doc|docx|xls|xlsx)$
and
^(([a-zA-Z]\:)|(\\))(\\{1}|((\\{1})[^\\]([^/:*?<>""|]*))+)$
etc...
Run Code Online (Sandbox Code Playgroud)
我的要求如下所述:让我们说如果文件名是"c:\ Demo.txt"那么它应该检查每个可能性,就像不应该包含双斜线(c:\\Demo\\demo.text)没有像(c::\Demo\demo.text)那样的额外冒号.应该接受像(\\staging\servers)和其他验证的UNC文件.请帮忙.我真的被困在这里了.
我想检查文件夹是否存在,如果没有,则创建它.但我不知道提供的路径是否有效.当路径无效时,会发生以下情况.
string path = "this is an invalid path";
if (!Directory.Exists(path))
Directory.CreateDirectory(path); //Exception thrown here
Run Code Online (Sandbox Code Playgroud)
如果提供无效路径,则会引发DirectoryNotFoundException异常.
如何阻止此异常发生?我不想使用try-catch.我想检测即使在异常发生之前也会发生此异常.
当我读到这个方法时System.IO.File.Exists(string path),我对这句话感到困惑
不应将Exists方法用于路径验证,此方法仅检查路径中指定的文件是否存在.
对我来说,两个语句"这条路径中的文件存在"和"[文件]的路径是有效的"几乎是同义词,所以我遗漏了一些东西.什么?为什么我不应该验证路径File.Exists()?