标题:求助: 文件路径:
只看楼主
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
结帖率:97.22%
已结贴  问题点数:20 回复次数:9 
求助: 文件路径:

如界面上textBox1, 视频文件输入路径。
textBox2, MP4文件保存路径。

textBox1、textBox2可以使用 FolderBrowserDialog 浏览选择路径,键盘输入路径。
开始转换MP4时,先要判断textBox1、textBox2中的路径是否在,可以使用filesystem::exists()进行判断。
如果textBox2, MP4文件保存路径, textBox2不为空,且路径不存在,就需要判断textBox2中的字符串是否符合路径格式。
如果符合路径格式,就使用 Directory::CreateDirectory 方法 (String) 创建MP4文件保存路径。。。

求教:如何判断textBox2中的字符串是否符合路径格式。
 
搜索更多相关主题的帖子: 保存 格式 判断 路径 文件 
2022-12-09 16:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
所谓“符合路径格式”的规则是什么?
不同的操作系统肯定不一样(Windows与Linux),不同的文件系统也不一样(fat32与ntfs),不同的API也不一样(有些兼容正斜杠饭斜杠,有些兼容重复的路径分隔符,甚至连允许的字符集都不一样)
即使路径在当前环境下合法,也未必能创建成功(比如磁盘空间不足)

所以正确的处理逻辑应当是,转换时执行 std::filesystem::create_directories(这是C++的函数,CLI我不懂),执行失败告知异常原因。
2022-12-09 18:41
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:2 
调用函数返回判断应该就可以,返回失败就当无效。
2022-12-09 18:51
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
得分:0 
回复 2楼 rjsp
没什么好办法了是吗?
只能自己写功能函数了。
textBox->Text转化成 char[]数组,通过每一个字符来判断了吗???
新问题来了。如果路径是纯英文和数字还可以,如果是汉字如何判断呀。。。


还有一个思路,对textBox输入进行限制,让它输入的只能符合“路径字符串规范”。
同样的问题,如何判断输入是不是汉字。。。
2022-12-09 23:50
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
得分:0 
回复 3楼 吹水佬
求详细说明:我水平很有限,请详细说明。

你的意思是用 textBox2->Text的字符串,直接创建目录。
然后使用filesystem::exists()看创建目录是否存在吗??
程序代码:
#include <iostream>
using namespace System;
using namespace System::IO;
using namespace std;
int main()
{
    String^ path = "d:\\MyDir\\123";
    if (!Directory::Exists(path))
    {
        DirectoryInfo^ crpath;
        try
        {
            crpath = Directory::CreateDirectory(path);
        }
        catch (Exception^ e){}
        if (crpath != nullptr)
        {
            if (crpath->FullName == path)
                printf("创建目录名字正确\n");
            else
                printf("创建目录名字错误\n");
        }
        if (Directory::Exists(path))
            printf("%s 目录创建成功\n", path);
        else
            printf("%s 目录创建成失败\n", path);
    }
    else
        printf("%s 目录已经在\n", path);
    getchar();
    return 0;
}


我试验过了,如果指定 H: 盘不存在,创建会失败。
如果格式错误,‘\’可能创建成功,路径会出错。。。


H盘不存在。


"D:\\MyDir\\\123";
结果:
创建目录名字正确
D:\MyDir\S 目录创建成功


"D:\\MyDir\123";
结果:
创建目录名字正确
D:\MyDirS 目录创建成功


"D:\\MyDir\\123\123";
结果:
创建目录名字正确
D:\MyDir\123S 目录创建成功
2022-12-10 00:35
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:2 
回复 5楼 追梦人zmrghy
你创建目录的方法可能不是递归的,也就是说,最终目录的父目录或路径中某目录不存在时就会失败。
2022-12-10 08:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:2 
\123 是合法的
2022-12-10 08:42
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:4 
选择或创建文件夹最好由操作系统来处理,不要由用户直接输入。
如:调用系统的选择文件或文件夹对话框,通常是可以选择或创建。
2022-12-10 08:56
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
得分:0 
回复 8楼 吹水佬
textBox1、textBox2   可以使用 FolderBrowserDialog   浏览选择路径,  键盘输入路径。

如果textBox2, MP4文件保存路径, textBox2不为空,且路径不存在,
就需要判断textBox2中的字符串是否符合路径格式。
如果符合路径格式,
就使用 Directory::CreateDirectory 方法 (String) 创建MP4文件保存路径。。。



可以使用 FolderBrowserDialog   浏览选择路径,

还可以 键盘输入路径。
2022-12-11 00:23
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用追梦人zmrghy在2022-12-11 00:23:17的发言:

可以使用 FolderBrowserDialog   浏览选择路径,

还可以 键盘输入路径。

可以不用在此键盘输入路径,交由FolderBrowserDialog来处理,存在的就选用,不存在的就在FolderBrowserDialog里创建,创建时FolderBrowserDialog会处理不合法的输入。
2022-12-11 08:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510908-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014632 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved