C语言 判断用户要另存为的路径的合法性

l_gooogle_tong 2013-05-05 05:00:32
背景:做字符串替换的一个小程序,最终将数据保存到另一个文件。

经过:现在,假设用户输入了一个路径,这个路径可以是现在存在的,也可以是现在不存在的,如果不存在,则创建这个路径。

问题来了,我如何判断用户输入的这个不存在的路径是否合法呢?

细节:
我的一些不成功的做法:
首先,我使用了fopen_s(&tmpFile,filePath,"r")函数,但是很显然,这个不正确,因为如果用户输入的路径现在还不存在,却又是合法的,那这个函数肯定就是错的;
然后,我使用了fopen_s(&tmpFile,filePath,"w")函数,这个就更离谱了,随便我怎么输入路径,即使我输入的路径是“d://1.txt”,函数也没有报错,函数认为这个路径是正确的。
所以,我的问题就向上面那样了,不知道怎么判断一个不存在却又合法的路径的合法性。

此致:
先谢谢各位了。
...全文
420 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
l_gooogle_tong 2013-05-06
  • 打赏
  • 举报
回复
引用 15 楼 lm_whales 的回复:
1)自己判断,分析字符串。 2)API
谢谢。
l_gooogle_tong 2013-05-06
  • 打赏
  • 举报
回复
引用 13 楼 qq120848369 的回复:
判断存在否,用access。 判断合法否,用fnmatch。
初步一看,以为就是我要的菜,结果,我说怎么msdn里面查不到,原来,不是C/C++里面的函数。 不过还是谢谢了,作为程序员,我们要根据用户需求来解决问题啊。
lm_whales 2013-05-06
  • 打赏
  • 举报
回复
1)自己判断,分析字符串。 2)API
starytx 2013-05-06
  • 打赏
  • 举报
回复
引用 12 楼 l_gooogle_tong 的回复:
[quote=引用 9 楼 starytx 的回复:] 试试这个笨方法,创建一个目录,如果失败并且原因是目录名不合法打印一个提示,否则创建成功的话打印成功而且立马删除创建的目录(作为检测使用)
#include <Windows.h>


int main()
{

	char *pDir = "d://a.txt";
	if(!CreateDirectory(pDir, NULL))
	{
		if (GetLastError() == 123)
		{
			printf("文件名、目录名或卷标语法不正确。\n");
		}
	}
	else
	{
		printf("创建成功,马上清理掉\n");
		RemoveDirectory(pDir); 
	}

	return 0;
}
谢谢,只是这个是C的吗?我怎么看到是C++的呢。谢谢了。[/quote]这是使用了windows的API函数,无所谓C或C++
qq120848369 2013-05-05
  • 打赏
  • 举报
回复
判断存在否,用access。 判断合法否,用fnmatch。
l_gooogle_tong 2013-05-05
  • 打赏
  • 举报
回复
引用 9 楼 starytx 的回复:
试试这个笨方法,创建一个目录,如果失败并且原因是目录名不合法打印一个提示,否则创建成功的话打印成功而且立马删除创建的目录(作为检测使用)
#include <Windows.h>


int main()
{

	char *pDir = "d://a.txt";
	if(!CreateDirectory(pDir, NULL))
	{
		if (GetLastError() == 123)
		{
			printf("文件名、目录名或卷标语法不正确。\n");
		}
	}
	else
	{
		printf("创建成功,马上清理掉\n");
		RemoveDirectory(pDir); 
	}

	return 0;
}
谢谢,只是这个是C的吗?我怎么看到是C++的呢。谢谢了。
l_gooogle_tong 2013-05-05
  • 打赏
  • 举报
回复
引用 10 楼 mujiok2003 的回复:
[quote=引用 8 楼 l_gooogle_tong 的回复:] [quote=引用 7 楼 mujiok2003 的回复:] 不同系统对文件名要求不同。
就以windows系统为例吧。[/quote] 看看http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx[/quote] 谢谢,那个文章,看了好多都感觉看不到重点的样子。
mujiok2003 2013-05-05
  • 打赏
  • 举报
回复
引用 8 楼 l_gooogle_tong 的回复:
[quote=引用 7 楼 mujiok2003 的回复:] 不同系统对文件名要求不同。
就以windows系统为例吧。[/quote] 看看http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
starytx 2013-05-05
  • 打赏
  • 举报
回复
试试这个笨方法,创建一个目录,如果失败并且原因是目录名不合法打印一个提示,否则创建成功的话打印成功而且立马删除创建的目录(作为检测使用)
#include <Windows.h>


int main()
{

	char *pDir = "d://a.txt";
	if(!CreateDirectory(pDir, NULL))
	{
		if (GetLastError() == 123)
		{
			printf("文件名、目录名或卷标语法不正确。\n");
		}
	}
	else
	{
		printf("创建成功,马上清理掉\n");
		RemoveDirectory(pDir); 
	}

	return 0;
}
l_gooogle_tong 2013-05-05
  • 打赏
  • 举报
回复
引用 7 楼 mujiok2003 的回复:
不同系统对文件名要求不同。
就以windows系统为例吧。
mujiok2003 2013-05-05
  • 打赏
  • 举报
回复
不同系统对文件名要求不同。
mujiok2003 2013-05-05
  • 打赏
  • 举报
回复
语言本身不提供这样的功能,需要os api支持。
l_gooogle_tong 2013-05-05
  • 打赏
  • 举报
回复
引用 3 楼 qiminixi 的回复:
fopen: 以写方式打开文件时,如果文件存在,打开文件后将文件内容清空;如果文件不存在,新建一个文件。 已读方式打开文件时,如果文件存在,打开文件;如果文件不存在,提示错误。 判断路径是否合法用读方式应该就行了。
还是首先谢谢你的回答,你说的我知道,我现在是要判断一个不存在的文件,但是路径合法, 因为只要路径合法,写的时候,就自动写进去了。 所以,不是要求文件一定存在,只是要求路径合法。 还请各位大神现身吧。今天周末,大家都去玩去了吗?
qiminixi 2013-05-05
  • 打赏
  • 举报
回复
“如何判断用户输入的这个不存在的路径是否合法呢?” 这个自己判断吧,"F:\\d\\d\\d.xxx"这样的形式,符合飞算是非法的吧 盘符得对 反斜杠有没有无所谓,有的话包含文件夹,文件夹是否存在应该不在合法性的检查范围内 最后是.xxx得有
qiminixi 2013-05-05
  • 打赏
  • 举报
回复
fopen: 以写方式打开文件时,如果文件存在,打开文件后将文件内容清空;如果文件不存在,新建一个文件。 已读方式打开文件时,如果文件存在,打开文件;如果文件不存在,提示错误。 判断路径是否合法用读方式应该就行了。
l_gooogle_tong 2013-05-05
  • 打赏
  • 举报
回复
引用 1 楼 starytx 的回复:
lz参考一下这个资料 http://blog.csdn.net/xhhjin/article/details/6369336
我已经看过了,而且,在你的推荐下,我又认真看了一下。这个帖子和我的问题不是一个问题。 我不是要判断一个文件是否存在,我是想判断用户输入的这个路径是否合法。 例如:fopen_s(&tmpFile,"d:\\a.txt","w");----->路径合法,系统创建文件,不报错; 再如:fopen_s(&tmpFile,"d://a.txt","w");----->路径不合法,系统不穿件文件夹,却不报错。 我想问的是,路径是否合法,不是文件存在不存在。 路径不存在,不代表不合法噻。 还是谢谢你。
starytx 2013-05-05
  • 打赏
  • 举报
回复

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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