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

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. aspnet webapi 跨域请求 405错误

    跨域,请求按要求配置完毕之后,options预请求老是报错.原因是webapi 默认的web.config有配置 <handlers> <remove name="Exte ...

  2. Asp,Net里的Form表单

    1.Form表单是页面与Web服务器交互过程中最重要的信息来源. 2.<form action="传到哪个页面的网站地址" method="post和get 两种方 ...

  3. 最后一周psp

    团队项目PSP 一:表格     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论用户界面 10:20 11:45 25 40 80 分析 ...

  4. RPC 的概念模型与实现解析

    今天分布式应用.云计算.微服务大行其道,作为其技术基石之一的 RPC 你了解多少?一篇 RPC 的技术总结文章,数了下 5k+ 字,略长,可能也不适合休闲的碎片化时间阅读,可以先收藏抽空再细读:) 全 ...

  5. ASP.NET Core 数据保护(Data Protection)【中】

    前言 上篇主要是对 ASP.NET Core 的 Data Protection 做了一个简单的介绍,本篇主要是介绍一下API及使用方法. API 接口 ASP.NET Core Data Prote ...

  6. CVTE实习求职经历

    今天,听到有好多同学最近要去面试CVTE这家企业,于是呢,准备将自己的经历写上来,给大家一个参考,希望能够大家一次帮助. 一.整体感觉 首先呢,先讲一下我个人对这家企业的整体感觉吧. 1. 第一次 对 ...

  7. 《3D Math Primer for Graphics and Game Development》读书笔记2

    <3D Math Primer for Graphics and Game Development>读书笔记2 上一篇得到了"矩阵等价于变换后的基向量"这一结论. 本篇 ...

  8. 【Paddy】数据库监控系列(一) - 监控理念

    很多时候,都和身边朋友聊两个问题,DBA的日常工作都是哪些?什么才是数据库方面最重要的? 我相信这两个问题的答案每个人都不会完全一样,我也是,所以这里只代表我的个人观点,并且以下的内容将围绕我的思路展 ...

  9. ls /usr/linkapp 没反应

    ls /usr/linkapp ll /usr/linkapp  都是一样无反应 没有任何反应, ctrl + c /  ctrl + d 都不行 但是 ls /usr/linkapp/ | wc - ...

  10. iOS-中app启动闪退的原因

    这种情况应和所谓的内存不足关系不大,很少有程序会在初始化时载入大量内容导致崩溃,并且这类问题也很容易在开发阶段被发现,所以内存不足造成秒退的可能性低(内存不足退,通常是程序用了一段时间,切换了几个画面 ...