项目中需要使用到路径处理的地方比较多,对于路径的解析和匹配有时较为繁琐,现在提供一个对路径进行解析的方法:

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处理服务器路径的方法的更多相关文章

  1. JAVA获取服务器路径的方法

    1.在JSF环境中获取到ServletContext: 1 2 ServletContext sc = (ServletContext)FacesContext.         getCurrent ...

  2. 获取web服务器路径的方法 getResourceAsStream

    1.先获取 serlvetContext对象 2.调用getResourceAsStream  在方法里 "\"表示当前web的根目录  还要拼接上具体的文件路径 ServletC ...

  3. Tortoise 下修改服务器路径(Relocate与Switch)

    今天遇到SVN的路径变化,要在客户端修改服务器的下载路径,当初想直接删除重新checkout,后来想着还要重建项目比较麻烦,就找找修改服务器路径的方法.网上基本说的都是右键-->Relocate ...

  4. Java获取此次请求URL以及服务器根路径的方法

    http://www.jb51.net/article/71693.htm ********************************************** 本文介绍了Java获取此次请求 ...

  5. dotnet 获取程序所在路径的方法

    在 dotnet 有很多方法可以获取当前程序所在的路径,但是这些方法获取到的路径有一点不相同,特别是在工作路径不是当前的程序所在的路径的时候 通过下面几个方法都可以拿到程序所在的文件夹或程序文件 Ap ...

  6. asp.net 客户端上传文件全路径获取方法

    asp.net  获取客户端上传文件全路径方法: eg:F:\test\1.doc 基于浏览器安全问题,浏览器将屏蔽获取客户端文件全路径的方法,只能获取到文件的文件名,如果需要获取全路径则需要另想其他 ...

  7. ASP.NET获取路径的方法

    原文:[转载]ASP.NET获取路径的方法 HttpContext.Current.Request.PhysicalPath;    // 获得当前页面的完整物理路径.比如 F:\XFU.NSQS\p ...

  8. web项目中获取各种路径的方法

    ~Apple   web项目中各种路径的获取 1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/&qu ...

  9. 定时发布任务,在global.asax中获取文件的物理路径的方法

    如果要把一个相对路径或者虚拟路径映射道服务器的物理路径,通常会使用Server.MapPath()函数,比如将根目录下的html目录映射为物理路径:Server.MapPath("html& ...

随机推荐

  1. Unity之CharacterController 碰撞问题总结

    CharacterController 不会受到scene的重力影响,自带物理碰撞检测,在脱离导航网格的应用场景下(比如飞行),是很有优势的Unity原生工具组件.如果在复杂的应用场景里,会有多种CC ...

  2. HW2016_字符串_STL_DP

    一.在字符串str1中删除那些在str2中出现的字符. str2可能会有重复字符,直接遍历会导致效率低下,故先借助STL的set容器对str1查重: 然后,遍历str1和str2,对str1进行查重. ...

  3. ES6(四) --- 正则 Number Math

    想学vue了  重启ES6的学习之路 在ES5 中正则的构造器  RegExp  不支持第二个参数 ES6 做了调整   第二个参数表示正则表达式的修饰符(flag) var regex = new ...

  4. 设置Android Studio启动时可选最近打开过的工程

    Android Studio启动时,默认会打开最近关闭的工程. 如果想Android Studio在启动时,打开欢迎界面(Welcome to Android Studio界面),则可以通过设置Set ...

  5. 浅析 Linux 初始化 init 系统

    近年来,Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经逐渐淡出历史舞台,新的 UpStart 和 systemd 各有特点,越来越多的 Linux 发行版采纳了 ...

  6. 企业IT管理员IE11升级指南【1】—— Internet Explorer 11增强保护模式 (EPM) 介绍

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  7. ASP.NET MVC 5– 使用Wijmo MVC 5模板1分钟创建应用

    开始使用 使用ComponentOne Studio for ASP.NET Wijmo制作MVC5应用程序,首先要做的是安装Studio for ASP.NET Wijmo . 测试环境 VS201 ...

  8. 微冷的雨Java基础学习手记(一)

    使用Java理解程序逻辑 之凌波微步 船舶停靠在港湾是很安全的,但这不是造船的目的 北大青鸟五道口原玉明老师出品 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识点时,要 ...

  9. 启动 Apache2.2 的问题

    启动 Apache2.2 的问题: windows不能在本地计算机启动 Apache2.2.有关更多信息,查阅系统事件日志.如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码1 ...

  10. com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK assets/com.xx.xx

    完整的Error 信息(关键部分) Error:Execution failed for task ':fanwe_o2o_47_mgxz_dingzhi:transformResourcesWith ...