本篇文章属于《518抽奖软件开发日志》系列文章的一部分。
我在开发《518抽奖软件》(www.518cj.net)的时候,有时候需要检查输入的是否是合法的文件名,文件名是否含不可打印字符等。代码如下:
- //-------------------------------------
- //-1: 含不可打印字符
- // 0:无效
- // 1: 有效
- //-------------------------------------
- int Tapp::is_validFlnm(const WCHAR* name)
- {
- if (!name || *name == 0) return 0;
- int len = 0;
- for (int i = 0; 1; i++)
- {
- if (name[i] == 0) {
- len = i;
- break;
- }
- if (name[i] == L'\\' || name[i] == L'/' || name[i] == L':' ||
- name[i] == L'*' || name[i] == L'?' || name[i] == L'\"' ||
- name[i] == L'<' || name[i] == L'>' || name[i] == L'|') return 0;
-
- WORD type = 0;
- GetStringTypeW(CT_CTYPE1, &name[i], 1, &type);
- if (type & C1_CNTRL) return -1;
- }
- if (name[len - 1] == L'.' || name[len - 1] == L' ' || name[0] == L' ')
- return 0;
- return 1;
- }