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& ...
随机推荐
- 网站中使用中文个性字库字体--@font-face解决方案探索 l(转)
最近的项目有用到特别中文字体,最终效果如下图: 红线标记处均为字体,可选中,交互起来,比图片方便太多了. 解决思路就是将体积巨大的中文字库,取子集,只包涵要使用的那部分文字,因此体积就很小了(包含10 ...
- asp.net 验证码(一)Session
1.模板页 //创建网页模板 输入验证码文本框 并且将文本框中的内容发送的后端验证中去 <p>请输入验证码:<input type="text" name=&qu ...
- ListView.setAdapter(adapter);空指针异常的解决的总结
报空指针异常一般的情况: 1,没有找到布局文件的ID 检验是不是id重复或者写错了 2.控件没有实例化 3.没有找到布局文件的id,要看看是不是加载了布局了,必须加载了对应的布局才能找到对应布局下的 ...
- DOMO1
以下是Demo首页的预览图 demo下载:http://www.eoeandroid.com/forum.php?mod=attachment&aid=NjE0Njh8ZTIyZDA2M2N8 ...
- ABP理论学习之Abp Session
返回总目录 本篇目录 介绍 注入Session 使用Session属性 介绍 当应用程序要求用户登录时,那么应用程序也需要知道当前用户正在执行的操作.虽然ASP.NET本身在展现层提供了Session ...
- 动态Web API层
返回总目录 本篇目录 构建动态Web API控制器 ForAll 方法 重写ForAll 方法 Http动词 动态Javascript代理 Ajax参数 单一服务脚本 Angular支持 Durand ...
- .Net开发笔记(二十一) 反射在.net中的应用
反射概念在网上到处都有,但是讲到的具体的应用很少,一个重要的原因是现实中真的很少用得到它.引用msdn上对“反射”的解释: "通过 System.Reflection 命名空间中的类以及 S ...
- [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类
[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...
- 跟vczh看实例学编译原理——一:Tinymoe的设计哲学
自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但 ...
- rem单位和em单位的使用
今天弄了一点响应式的东西,本以为很快就可以弄好,结果还是绕晕了头,所以还是写下来方便下次看吧! 一开始我打算用百分比%来做响应式布局,后来算的很懵圈,就果断放弃了,哈哈是不是很明智. 接下来就是rem ...