过滤Windows文件名中的非法字符
转载:http://blog.csdn.net/infoworld/article/details/42033097
场景:
1. 通常生成文件时需要一个文件名,而生成文件名的方式可能是通过用户输入的字符,但是有些字符在windows上是不能作为文件名的,强行创建这类文件会失败。
2.一般可以通过正则表达式替换所有的非法字符,这里实现的是C++98 template(模板)方式的替换无效字符,std::string,std::wstring. 基本上windows上和字符串打交道都离不开wstring.
template<class T>
void FilterInvalidFileNameChar(T& str)
{
T t;
t.resize();
t[] = 0x5C; // \
t[] = 0x2F; // /
t[] = 0x3A; // :
t[] = 0x2A; // *
t[] = 0x3F; // ?
t[] = 0x22; // "
t[] = 0x3C; // <
t[] = 0x3E; // >
t[] = 0x7C; // |
int length = str.length();
for(int i = ; i< length; ++i)
{
if(t.find(str[i]) != T::npos )
{
str[i] = 0x5F;
}
}
}
inline char* Unicode2Ansi(const wchar_t* unicode)
{
int len;
len = WideCharToMultiByte(CP_ACP, , unicode, -, NULL, , NULL, NULL);
char *szUtf8 = (char*)malloc(len + );
memset(szUtf8, , len + );
WideCharToMultiByte(CP_ACP, ,unicode, -, szUtf8, len, NULL,NULL);
return szUtf8;
}
调用:
std::wstring wss(L"/asfasdf中国asdfas*dfa.txt");
FilterInvalidFileNameChar(wss);
cout << Unicode2Ansi(wss.c_str()) << endl; std::string ss("/asfasdf\\asdfas*dfa.txt");
FilterInvalidFileNameChar(ss);
cout << ss.c_str() << endl;
输出:
_asfasdf中国asdfas_dfa.txt
_asfasdf_asdfas_dfa.txt
过滤Windows文件名中的非法字符的更多相关文章
- 华为2013年西安java机试题目:如何过滤掉数组中的非法字符。
这道题目为记忆版本: 题目2描述: 编写一个算法,过滤掉数组中的非法字符,最终只剩下正式字符. 示例:输入数组:“!¥@&HuaWei*&%123” 调用函数后的输出结果,数组:“Hu ...
- SVN Files 的值“ < < < < < < < .mine”无效。路径中具有非法字符。
错误 1 Files 的值“ < < < < < < < .mine”无效.路径中具有非法字符. 今天使用SVN进行更新的时候,出现了如上问题,想起卓 ...
- 错误 1 Files 的值“ < < < < < < < .mine”无效。路径中具有非法字符。
错误 1 Files 的值“ < < < < < < < .mine”无效.路径中具有非法字符. 今天使用SVN进行更新的时候,出现了如上问题,想起卓 ...
- 去除下载电影和电视剧文件名中的多余字符[python实现]
讨厌下载电影和电视剧文件名中的多余字符(如网址和广告字样),,搞得文件名好长,可以使用下面的Python代码,自行修改即可. #!\usr\bin\env python # -*- coding: u ...
- SVN提交出现“< < < < < < < .mine’无效,路径中具有非法字符”的问题
使用SVN提交或更新后经常会出现”Files 的值’< < < < < < < .mine’无效.路径中具有非法字符”的错误.查阅了下资料,是因为:你更改了一 ...
- 解决 Files 的值"<<<<<<< HEAD"无效。路径中具有非法字符
通常我们使用版本控制后会出现诸如此类的问题,此时从vs工具找错误和调试是无法找到问题的,也不影响项目的运行,但是有错误就是得解决.原因是版本控制导致文件的路径出现问题. 解决 Files 的值&quo ...
- SVN版本冲突中 Files 的值“ < < < < < < < .mine”无效路径中具有非法字符的解决办法
.NET 中 SVN版本冲突中 Files 的值“ < < < < < < < .mine”无效路径中具有非法字符的解决办法: 一. 1.将项目逐个进行编译, ...
- SVN版本冲突,导致出现Files 的值“ < < < < < < < .mine”无效。路径中具有非法字符。
SVN版本冲突,导致出现Files 的值“ < < < < < < < .mine”无效.路径中具有非法字符. 右键编辑.... 打开并删除含有'<&l ...
- 【转载】在Windows终端中显示UTF-8字符
一直苦恼于如何在Windows终端中显示UTF-8字符的问题.比如,在MySQL命令行下,如果数据库的编码是UTF-8,那么,在查询数据库的时候,里面的中文都会变成乱码.今天半无意的搜索了一下,结果发 ...
随机推荐
- css实现简单几何图形
前言:你知道吗?用代码就可以做出三角形.圆形.扇形等等这些几何图形呦.快过来一探究竟吧! 页面上一些简单的图形,如三角形.圆形等等,除了用图片来实现,我们还可以用css的border属性来实现,不仅减 ...
- nginx之配置proxy_set_header
win10客户端请求web服务,win10的ip:192.168.223.1 nginx作为反向代理服务器:192.168.223.136 nginx作为后端web服务器:192.168.223.13 ...
- javascript 调用cookies
cookie 用来保存信息,并且与服务器互动,因此前端后端都可以使用cookie 值得一提的是:虽然cookie是以文件的形式存储在客户端的电脑上, 但浏览器只会让创建cookie的网站访 ...
- Netty 使用经验总结(一)
1: Netty 4的线程模型转变 在Netty 3的时候,upstream是在IO线程里执行的,而downstream是在业务线程里执行的.比如netty从网络读取一个包传递给你的handler的时 ...
- 读取Linux上图片
/** * 读取图片 * @param path * @param response * @throws Exception */ public static void showImg(String ...
- 复习一下property
在面向对象程序里,一个对象不要直接访问另一个对象内部的数据.所以我们使用accessor methods来进行对象内部的数据交互. accessor methods(getters and sette ...
- python接口自动化-token参数关联登录(二)
原文地址https://www.cnblogs.com/yoyoketang/p/9098096.html 原文地址https://www.cnblogs.com/yoyoketang/p/68866 ...
- 手把手教你,C#.Net如何用Log4net把错误日志写入到SQLite数据库中
在项目中,我们往往会有把错误日志记录下来的习惯,这样有利于当网站发布后,能第一时间找到错误的所在地,以及错误的原因,以便于我们第一时间纠错.往往我们会把错误日志直接写到txt文本中,虽然操作简单,但是 ...
- pycharm跳到指定的行
ctrl+g 弹出一个框,输入要跳的行数 ctrl+home 光标移到第一行 ctrl+end 光标移到最后一行
- liferay项目经验之BasePortlet
package com.ebizwindow.crm.portlet.base; import java.io.IOException; import java.io.InputStream; imp ...