判断一个字符串是否可作为文件名

maiomaio 2008-11-25 11:46:56
如题
...全文
627 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilovedrv 2008-11-25
  • 打赏
  • 举报
回复
呵呵,还是让操作系统是管吧,为什么要自己写呢,况且不同的操作系统可能还有不同


bool is_file_name_valid(const string &filename)
{
FILE *fp = fopen(filename.c_str(), "a+"); // filename包含路径
if ( fp )
fclose(fp);

return (fp != NULL);
}

来灵 2008-11-25
  • 打赏
  • 举报
回复
5 楼Good!
你可以在硬盘上建立一个文件,试着给名字里边输入正常字母和非法字母(比如\),就会弹出错误提示。
Chendy1985 2008-11-25
  • 打赏
  • 举报
回复
遍歷一下看有沒有不合要求的字符就行么
hellward 2008-11-25
  • 打赏
  • 举报
回复
  (1)文件名最长可以使用255个字符。
  (2)可以使用扩展名,扩展名用来表示文件类型,也可以使用多间隔符的扩展名。如win.ini.txt是一个合法的文件名,但其文件类型由最后一个扩展名决定。
  (3)文件名中允许使用空格,但不允许使用下列字符(英文输入法状态):< > / \ | : " * ?
  (4)windows系统对文件名中字母的大小写在显示时有不同,但在使用时不区分大小写。
zaodt 2008-11-25
  • 打赏
  • 举报
回复
试着去建立这个文件。


文件有一些限制,如 con 不能作为文件名等。
starytx 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jennyvenus 的回复:]
可以尝试打开这个文件。
[/Quote]
这不行吧,文件不存在呢?但名字合法...
用户 昵称 2008-11-25
  • 打赏
  • 举报
回复
可以尝试打开这个文件。
starytx 2008-11-25
  • 打赏
  • 举报
回复
很简单啊,你看看文件名都不能使用哪些字符(随便建一个记事本,改名字,输入一个“/”,看看弹出的提示都有哪些字符),然后循环检查字符串的每个字符....
maiomaio 2008-11-25
  • 打赏
  • 举报
回复
谢谢楼上的各位,我采用的就是试着打开
程序员刘帅 2008-11-25
  • 打赏
  • 举报
回复
这里有一段代码,写的比较完整,8.3格式的文件名和长文件名合法字符并不相同(DOS、Windows平台)。
const
{ for short 8.3 file names }
ShortForbiddenChars : set of Char = [';', '=', '+', '<', '>', '|',
'"', '[', ']', '\', '/', ''''];
{ for long file names }
LongForbiddenChars : set of Char = ['<', '>', '|', '"', '\', '/', ':', '*', '?'];

function TestFilename(Filename: String; islong: Boolean) : Boolean;
var
I: integer;
begin
Result := Filename <> '';
if islong then
begin
for I := 1 to Length(Filename) do
Result := Result and not (Filename[I] in LongForbiddenChars);
end
else
begin
for I := 1 to Length(Filename) do
Result := Result and not (Filename[I] in ShortForbiddenChars);
end;
end;

另外,像con prn这种名字,应该也算是合法文件名,只不过已经被系统占用了,所以我们不能创建。

使用fopen的话,如果存在同名的目录怎么办?fopen也会失败的。
pcwe2002 2008-11-25
  • 打赏
  • 举报
回复
同意以增加方式创建文件,如果不想人家看到该文件,你可以试着用GetTempPath得到临时目录创建该文件
用户 昵称 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 starytx 的回复:]
引用 2 楼 jennyvenus 的回复:
可以尝试打开这个文件。

这不行吧,文件不存在呢?但名字合法...
[/Quote]
打开文件可以用增加那种方式,如果文件不存在就自动创建了。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧