相关疑难解决方法(0)

HashSet与List性能

很明显,泛型HashSet<T>类的搜索性能高于泛型List<T>类.只需将基于散列的密钥与线性方法进行比较即可List<T>.

但是,计算散列键本身可能需要一些CPU周期,因此对于少量项目,线性搜索可以是一个真正的替代HashSet<T>.

我的问题:收支平衡在哪里?

为了简化场景(并且公平),我们假设List<T>该类使用元素的Equals()方法来标识项目.

.net collections hash performance list

374
推荐指数
8
解决办法
18万
查看次数

C#清理文件名

我最近一直在将各种位置的MP3转移到存储库中.我一直使用ID3标签构建新的文件名(谢谢,TagLib-Sharp!),我注意到我得到了一个System.NotSupportedException:

"不支持给定路径的格式."

这是通过产生任一File.Copy()Directory.CreateDirectory().

没过多久就意识到我的文件名需要消毒.所以我做了一件显而易见的事:

public static string SanitizePath_(string path, char replaceChar)
{
    string dir = Path.GetDirectoryName(path);
    foreach (char c in Path.GetInvalidPathChars())
        dir = dir.Replace(c, replaceChar);

    string name = Path.GetFileName(path);
    foreach (char c in Path.GetInvalidFileNameChars())
        name = name.Replace(c, replaceChar);

    return dir + name;
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,我继续得到例外.原来,':'不在集合中Path.GetInvalidPathChars(),因为它在路径根中有效.我认为这是有道理的 - 但这必须是一个非常普遍的问题.有没有人有一些消毒路径的短代码?最彻底的我已经想到了这一点,但感觉它可能是矫枉过正.

    // replaces invalid characters with replaceChar
    public static string SanitizePath(string path, char replaceChar)
    {
        // construct a list of characters that can't show up in filenames. …
Run Code Online (Sandbox Code Playgroud)

c# validation invalid-characters path sanitize

159
推荐指数
8
解决办法
8万
查看次数

如何在Windows下检查给定字符串是否是合法/有效的文件名?

我想在我的应用程序中包含批处理文件重命名功能.用户可以键入目标文件名模式和(在替换模式中的一些通配符之后)我需要检查它是否是Windows下的合法文件名.我试过使用正则表达式,[a-zA-Z0-9_]+但它不包括来自各种语言的许多国家特定字符(例如变音符号等).做这种检查的最佳方法是什么?

c# windows filesystems file

156
推荐指数
13
解决办法
15万
查看次数

在C#中检查文件名是*可能*有效(不是它存在)

System.IO命名空间中是否有一个检查文件名有效性的方法?

例如,C:\foo\bar将验证,:"~-*不会

或者有点棘手,X:\foo\bar会验证系统上是否有X:驱动器,否则不会.

我想我自己可以编写这样的方法,但我对内置的方法更感兴趣.

c# validation file

122
推荐指数
6
解决办法
11万
查看次数

.Net:如何检查路径中的非法字符?

有没有办法在.Net中检查路径中的字符串是否包含无效字符?我知道我可以迭代Path.InvalidPathChars中的每个字符,看看我的String是否包含一个,但我更喜欢一个简单的,也许更正式的解决方案.

有吗?

我发现如果我只检查Get,我仍会得到一个例外

更新:

我发现GetInvalidPathChars不会覆盖每个无效的路径字符.GetInvalidFileNameChars还有5个,包括'?',我遇到过.我要改用它,我会报告它是否也证明是不合适的.

更新2:

GetInvalidFileNameChars绝对不是我想要的.它包含':',任何绝对路径将包含("C:\ whatever").我想我毕竟不得不使用GetInvalidPathChars,并添加'?' 以及任何其他导致我出现问题的角色.欢迎提供更好的解

.net path illegal-characters

28
推荐指数
4
解决办法
4万
查看次数

从FileName(或目录,文件夹,文件)中删除无效(不允许,错误)字符

我已经写了这个小方法来实现subj中的目标,但是,有更高效(更简单)的方法吗?我希望这可以帮助那些像我一样搜索这个的人.

var fileName = new System.Text.StringBuilder();
fileName.Append("*Bad/\ :, Filename,? ");
// get rid of invalid chars
while (fileName.ToString().IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) > -1)
{
    fileName = fileName.Remove(fileName.ToString().IndexOfAny(System.IO.Path.GetInvalidFileNameChars()), 1);
}
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net

19
推荐指数
3
解决办法
2万
查看次数

C#从Filename中删除无效字符

我有来自SQL Server数据库的nvarchar字段的数据通过EF3.5.此字符串用于创建文件名,需要删除无效字符并尝试以下选项,但它们都不起作用.请提出为什么这是一个可以理解的谜团?我做错了吗?

我浏览了本网站上的几乎所有相关问题..现在发布了来自其他类似问题的所有建议/答案的综合问题.

UPD:问题无关......所有这些选项都有效.所以将其发布到社区维基.

public static string CleanFileName1(string filename)
{            
    string file = filename;                                            
    file = string.Concat(file.Split(System.IO.Path.GetInvalidFileNameChars(), StringSplitOptions.RemoveEmptyEntries));

    if (file.Length > 250)
    {
        file = file.Substring(0, 250);
    }
    return file;
 }

public static string CleanFileName2(string filename)
{
    var builder = new StringBuilder();
    var invalid = System.IO.Path.GetInvalidFileNameChars();
    foreach (var cur in filename)
    {
        if (!invalid.Contains(cur))
        {
            builder.Append(cur);
        }
    }
    return builder.ToString();
}

public static string CleanFileName3(string filename)
{                                    
    string regexSearch = string.Format("{0}{1}",
        new string(System.IO.Path.GetInvalidFileNameChars()),
        new string(System.IO.Path.GetInvalidPathChars()));
    Regex r = new Regex(string.Format("[{0}]", …
Run Code Online (Sandbox Code Playgroud)

c# string

15
推荐指数
3
解决办法
3万
查看次数

C#string.replace删除非法字符

我正在研究一个程序,它根据列的标题读取文件并保存它们.其中一些标题有文件名的非法字符,所以我写了这段代码来处理这些问题.

string headerfile = saveDir + "\\" + tVS.Nodes[r].Text.Replace("\"", "").Replace
              ("/","").Replace(":"," -").Replace(">","(Greater Than)") + ".csv";
Run Code Online (Sandbox Code Playgroud)

在没有4的情况下有没有更好的方法.Replace()呢?或者是否有某种内置的非法角色去除器,我不知道?

谢谢!

编辑:它不需要用任何特定的字符替换字符.一个空白就足够了.

c# string

13
推荐指数
2
解决办法
3万
查看次数

你如何正确地逃避.NET中的文档名称?

我们在我们的Web服务器(人们上传它们)上存储了一堆奇怪的文档名称,这些文档名称包含空格,符号等各种字符.当我们生成这些文档的链接时,我们需要将它们转义,以便服务器可以通过以下方式查找文件:它在数据库中的原始名称.但是,在所有情况下,内置的.NET转义函数都不会正常工作.

拿文件Hello#There.docx:

UrlEncode 将正确处理:

HttpUtility.UrlEncode("Hello#There");
"Hello%23There"
Run Code Online (Sandbox Code Playgroud)

然而,UrlEncode处理Hello There.docx正确:

HttpUtility.UrlEncode("Hello There.docx");
"Hello+There.docx"
Run Code Online (Sandbox Code Playgroud)

+符号仅对URL参数有效,而不对文档名称有效.有趣的是,这实际上适用于Visual Studio测试Web服务器,但不适用于IIS.

UrlPathEncode函数适用于空格:

HttpUtility.UrlPathEncode("Hello There.docx");
"Hello%20There.docx"
Run Code Online (Sandbox Code Playgroud)

但是,它不会逃避其他角色,如#角色:

HttpUtility.UrlPathEncode("Hello#There.docx");
"Hello#There.docx"
Run Code Online (Sandbox Code Playgroud)

此链接无效,因为它#被解释为URL哈希,甚至从未到达服务器.

是否有.NET实用程序方法来转义文档名称中的所有非字母数字字符,或者我是否必须自己编写?

.net html c# escaping

9
推荐指数
2
解决办法
2039
查看次数

未生成AppDomain.DynamicDirectory

我正在使用以下代码创建AppDomain

String pa = @"C:\Users\user\AppData\Local\Temp\2\db5fjamk.xnl";
System.IO.Directory.CreateDirectory(pa);
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory; //f:\projectpath\out\debug-i386-unittest\UnitTests
setup.ApplicationName = string.Concat(AppDomain.CurrentDomain.FriendlyName, DateTime.UtcNow.Ticks); //UnitTestAdapter: Running test636559691791186101
setup.DynamicBase = pa;
Evidence evidence = AppDomain.CurrentDomain.Evidence;
_Domain = AppDomain.CreateDomain(setup.ApplicationName, evidence, setup);
Run Code Online (Sandbox Code Playgroud)

但_Domain.DynamicDirectory属性不存在.https://msdn.microsoft.com/en-us/library/system.appdomain.dynamicdirectory(v=vs.110).aspx清楚地说明了使用AppDomainSetup.DynamicBase.

在vstest.console.exe中执行的原因可能会更改App Domains的行为.有工作吗?

c# appdomain appdomainsetup vstest.console.exe

7
推荐指数
1
解决办法
262
查看次数