DotNet处理服务器路径的方法
项目中需要使用到路径处理的地方比较多,对于路径的解析和匹配有时较为繁琐,现在提供一个对路径进行解析的方法:
1.验证设置路径字符串:
/// <summary>
/// 验证设置路径字符串
/// </summary>
/// <param name="path">路径字符串</param>
/// <param name="isSequential">如果正在创建路径</param>
static public void ValidatePath(string path, bool isSequential)
{
ValidatePath(isSequential ? path + "" : path);
} /// <summary>
/// 验证设置路径字符串
/// </summary>
/// <param name="path">路径字符串</param>
/// <exception cref="ArgumentException">路径无效</exception>
static public void ValidatePath(string path)
{
if (path == null)
throw new ArgumentException("路径不能为空");
if (path.Length == )
throw new ArgumentException("路径长度必须大于0");
if (path[] != '/')
throw new ArgumentException("路径必须启动/字符");
if (path.Length == ) return;
if (path[path.Length - ] == '/')
throw new ArgumentException("路径不能结束与/字符"); string reason = null;
var lastc = '/';
var chars = path.ToCharArray();
for (var i = ; i < chars.Length; lastc = chars[i], i++)
{
var c = chars[i]; if (c == ) { reason = "不允许空字符 @" + i; break; }
if (c == '/' && lastc == '/') { reason = "指定的空节点名称@" + i; break; }
if (c == '.' && lastc == '.')
{
if (chars[i - ] != '/' || ((i + != chars.Length) && chars[i + ] != '/')) continue;
reason = "不允许的相对路径 @" + i;
break;
}
if (c == '.')
{
if (chars[i - ] != '/' || ((i + != chars.Length) && chars[i + ] != '/')) continue;
reason = "不允许的相对路径 @" + i;
break;
}
if ((c <= '\u0000' || c >= '\u001f') && (c <= '\u007f' || c >= '\u009F') &&
(c <= '\ud800' || c >= '\uf8ff') && (c <= '\ufff0' || c >= '\uffff')) continue;
reason = "无效的字符 @" + i;
break;
} if (reason != null) throw new ArgumentException(string.Format("无效的路径字符串 \"{0}\" 引起的 {1}", path, reason));
}
2.查看服务器的路径:
/// <summary>
/// 在目录到客户端的路径(如果有的话)。期望
///此功能是客户端路径已在此之前验证
////调用/函数调用
/// </summary>
/// <param name="chroot"></param>
/// <param name="clientPath">节点的路径。</param>
/// <returns>查看服务器的路径(chroot添加到客户端的路径)</returns>
static public string PrependChroot(string chroot, string clientPath)
{
if (string.IsNullOrEmpty(chroot)) return clientPath;
return clientPath.Length == ? chroot : string.Concat(chroot, clientPath);
}
3.删除目录:
/// <summary>
/// 删除目录
/// </summary>
/// <param name="chroot"></param>
/// <param name="serverPath"></param>
/// <returns></returns>
static public string RemoveChroot(string chroot, string serverPath)
{
if (string.IsNullOrEmpty(chroot)) return serverPath;
return string.Compare(serverPath, chroot, StringComparison.Ordinal) == ? "/" : serverPath.Substring(chroot.Length);
}
DotNet处理服务器路径的方法的更多相关文章
- JAVA获取服务器路径的方法
1.在JSF环境中获取到ServletContext: 1 2 ServletContext sc = (ServletContext)FacesContext. getCurrent ...
- 获取web服务器路径的方法 getResourceAsStream
1.先获取 serlvetContext对象 2.调用getResourceAsStream 在方法里 "\"表示当前web的根目录 还要拼接上具体的文件路径 ServletC ...
- Tortoise 下修改服务器路径(Relocate与Switch)
今天遇到SVN的路径变化,要在客户端修改服务器的下载路径,当初想直接删除重新checkout,后来想着还要重建项目比较麻烦,就找找修改服务器路径的方法.网上基本说的都是右键-->Relocate ...
- Java获取此次请求URL以及服务器根路径的方法
http://www.jb51.net/article/71693.htm ********************************************** 本文介绍了Java获取此次请求 ...
- dotnet 获取程序所在路径的方法
在 dotnet 有很多方法可以获取当前程序所在的路径,但是这些方法获取到的路径有一点不相同,特别是在工作路径不是当前的程序所在的路径的时候 通过下面几个方法都可以拿到程序所在的文件夹或程序文件 Ap ...
- asp.net 客户端上传文件全路径获取方法
asp.net 获取客户端上传文件全路径方法: eg:F:\test\1.doc 基于浏览器安全问题,浏览器将屏蔽获取客户端文件全路径的方法,只能获取到文件的文件名,如果需要获取全路径则需要另想其他 ...
- ASP.NET获取路径的方法
原文:[转载]ASP.NET获取路径的方法 HttpContext.Current.Request.PhysicalPath; // 获得当前页面的完整物理路径.比如 F:\XFU.NSQS\p ...
- web项目中获取各种路径的方法
~Apple web项目中各种路径的获取 1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/&qu ...
- 定时发布任务,在global.asax中获取文件的物理路径的方法
如果要把一个相对路径或者虚拟路径映射道服务器的物理路径,通常会使用Server.MapPath()函数,比如将根目录下的html目录映射为物理路径:Server.MapPath("html& ...
随机推荐
- IIS和4.0安装到底有没有先后顺序解答
在很多人或许很多技术大神都会觉得IIS的安装和4.0没得先后顺序的.其错误弊端在与IIS没有注册到4.0上. 经过今天遇到了服务器安装服务端发觉报错[无法识别的属性“targetFramework”. ...
- VB.net 2010下关联与程序图标设置
'*************************************************************************'**模 块 名:VB.net 2010下关联与程序 ...
- C语言中的sizeof()
sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着"辛苦我一个,幸福千万人"的伟大思想,我决定将其尽可能详细的总结一下. 但当我总结的时候才发现,这个 ...
- 剑指Offer面试题:29.丑数
一.题目:丑数 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个 ...
- Understand Lambda Expressions in 3 minutes(翻译)
本文翻译自CodeProject上的一篇简单解释Lambda表达式的文章,适合新手理解.译文后面我补充了一点对Lambda表达式的说明. 1.什么是Lambda表达式? Lambda表达式是一种匿名方 ...
- Net作业调度(一) -Quartz.Net入门
背景 很多时候,项目需要在不同时刻,执行一个或很多个不同的作业. Windows执行计划这时并不能很好的满足需求了,迫切需要一个更为强大,方便管理,集群部署的作业调度框架. 介绍 Quartz一个开源 ...
- xamarin UWP ActivityIndicator
在xamarin的UWP平台使用ActivityIndicator时,如果你时后台创建的这个对象,请设置他的宽度,不然在UWP平台下会发现找不这个对象,其实是在这个平台和特点版本下的宽度没设置,导致有 ...
- 删除数据表中除id外其他字段相同的冗余信息
删除一个信息表中除id外其他字段都相同的冗余信息,如下 id name addr 1 a b 2 a b 3 b c 删除这个表中的冗余信息 即应该是 id name addr 1 a b 3 b c ...
- Screeps ———— A MMO Strategy Sandbox Game for Programmers
At the beginning, let's see three of this game's captures. Yes, As what you see in these pictures, y ...
- 【原创】数据挖掘案例——ReliefF和K-means算法的医学应用
数据挖掘方法的提出,让人们有能力最终认识数据的真正价值,即蕴藏在数据中的信息和知识.数据挖掘 (DataMiriing),指的是从大型数据库或数据仓库中提取人们感兴趣的知识,这些知识是隐含的.事先未知 ...