过滤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,那么,在查询数据库的时候,里面的中文都会变成乱码.今天半无意的搜索了一下,结果发 ...
随机推荐
- Primitive Data Types
Primitive Data Types (The Java™ Tutorials > Learning the Java Language > Language Basics) http ...
- ArcGIS URL 组成
转自帮助文档:http://server.arcgis.com/zh-cn/server/latest/administer/windows/components-of-arcgis-urls.htm ...
- Jmeter(五)_函数
JMeter提供了很多函数,如果能够熟练使用,可以为脚本带来很多方便. JMeter函数是一种特殊值,可用于除测试计划外的任何组件. 函数调用的格式如下所示:${__functionName(var1 ...
- 不再以讹传讹,GET和POST的真正区别(转)
add by zhj:按照restful的定义,GET是用于获取记录(幂等),POST用于创建记录(不幂等).GET也能带消息体?这个我没试过,文中说用浏览器发GET请求 是没法带的.另外,在< ...
- dedecms自增标签[field:global.autoindex/]的运用
用bootstrap建站时用到幻灯片切换模块,里面有个active(下面代码中的data-slide-to="0"),其余的按顺序递增(1,2),如果用dedecms就可以用aut ...
- C#基础笔记(第十一天)
1.复习字符串(1)字符串的不可变性(2)字符串的方法:1)Split() 分割 把字符串中不想要的内容分割掉 返回一个字符串类型的数组 可以添加StringSplitOption.RemoveEmp ...
- linux报错 find: missing argument to `-exec'
在linux下使用find命令时,报错:find: missing argument to `-exec' 具体执行命令为: find /u03 -name server.xml -exec grep ...
- [py]pycharm远程环境添加
pycharm配置settings.jar pycharm远程环境调用.zip xadmin xadmin-django2 pycharm激活 最新2018.2激活---更新2018年8月8日 15: ...
- 蒙特卡罗(Monte Carlo)方法简介
蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法. 二 解决问题的基本思路 Monte Carlo方法的基本思想很早以前就被人们所发 ...
- pycharm跳到指定的行
ctrl+g 弹出一个框,输入要跳的行数 ctrl+home 光标移到第一行 ctrl+end 光标移到最后一行