| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2833 人关注过本帖
标题:求助,全注释掉,留个空函数,还是有错。。。
只看楼主 加入收藏
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:406
专家分:190
注 册:2021-4-9
结帖率:97.26%
收藏
已结贴  问题点数:20 回复次数:22 
求助,全注释掉,留个空函数,还是有错。。。
求助,全注释掉,留个空函数,还是有错。。。

程序代码:
#include <iostream>
#include <filesystem>
#include <algorithm>
using namespace std;

bool ReduceFileName(const std::filesystem::path& path)
{
    //auto make_name_name = [](const std::wstring& filename)
    //{
    //    size_t a = filename.find(L':');
    //    if (a != std::wstring::npos)
    //    {
    //        a = filename.find_first_not_of(L"\t\n\v\f\r ", a + 1);
    //        size_t b = filename.find_first_of(L"((", a);
    //        b = filename.find_last_not_of(L"\t\n\v\f\r ", b - 1);
    //        return filename.substr(a, b + 1 - a);
    //    }
    //    return filename;
    //};

    //using namespace std::filesystem;
    //try
    //{
    //    for (auto& entry : directory_iterator(path))
    //    {
    //        if (entry.is_regular_file()) // 只处理常规文件
    //        {
    //            auto ext = entry.path().extension().generic_wstring(); // 扩展名
    //            std::for_each(begin(ext), end(ext), [](auto& c) {if (c >= L'A'&&c <= L'Z') c += L'a' - L'A'; }); // 扩展名转化成小写
    //            if (ext == L".mp4")
    //            {
    //                const auto& old_name = entry.path().stem().generic_wstring();
    //                const auto& new_name = make_name_name(old_name);
    //                if (old_name != new_name)
    //                {
    //                    wcout << old_name << L" -> " << new_name;

    //                    auto new_path = entry.path().parent_path() / (new_name + L".mp4");
    //                    if (exists(new_path)) // 新文件名已经存在
    //                    {
    //                        wcout << L" --- [failed] 文件已存在";
    //                    }
    //                    else
    //                    {
    //                        std::error_code ec;
    //                        rename(entry, new_path, ec);
    //                        if (ec)
    //                            cout << " --- [failed] " << ec.message();
    //                    }

    //                    wcout << L'\n';
    //                }
    //            }
    //        }
    //    }
    //}
    //catch (const std::exception& e)
    //{
    //    cout << "[failed] " << e.what() << '\n';
    //    return false;
    //}
    return true;
}

int main(void)
{
    wcout.imbue(std::locale(std::locale(), "", std::locale::ctype));
    ReduceFileName(u8R"(C:\Users\Administrator\Desktop\[WPF]JJDown\Download\)"); // 使用 Unicode 可避免GBK认字不全
}



1>------ 已启动生成: 项目: test3, 配置: Debug Win32 ------
1>  test3.cpp
1>c:\users\administrator\desktop\test3\test3\test3.cpp(6): error C3083: “filesystem”:“::”左侧的符号必须是一种类型
1>c:\users\administrator\desktop\test3\test3\test3.cpp(6): error C2039: “path”: 不是“std”的成员
1>  c:\program files (x86)\microsoft visual studio 14.0\vc\include\filesystem(26): note: 参见“std”的声明
1>c:\users\administrator\desktop\test3\test3\test3.cpp(6): error C2143: 语法错误: 缺少“,”(在“&”的前面)
1>c:\users\administrator\desktop\test3\test3\test3.cpp(68): error C2664: “bool ReduceFileName(const int)”: 无法将参数 1 从“const char [53]”转换为“const int”
1>  c:\users\administrator\desktop\test3\test3\test3.cpp(68): note: 没有使该转换得以执行的上下文
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
搜索更多相关主题的帖子: const if auto path std 
2022-05-23 20:51
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1509
专家分:9241
注 册:2010-3-16
收藏
得分:10 
加参数/std:c++17
2022-05-23 21:54
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:406
专家分:190
注 册:2021-4-9
收藏
得分:0 
回复 2楼 apull
bool ReduceFileName(const std::C++17::filesystem::path& path)

这样吗?。。。。
VS2015也可以使用吗???
2022-05-24 07:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:10 
回复 3楼 追梦人zmrghy
我搜了一下,https://docs.
也就是起码用 VS2019,最好用当前的 VS2022
2022-05-24 08:10
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1509
专家分:9241
注 册:2010-3-16
收藏
得分:0 
回复 3楼 追梦人zmrghy
#include <filesystem>
这个是c++17才有的,所以要加编译参数指定c++17,或者项目属性中选择c++版本为17。
2022-05-24 09:22
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:406
专家分:190
注 册:2021-4-9
收藏
得分:0 
回复 4楼 rjsp
你教我的,这种算法用不了了!!!!
电脑用VS2015就很卡,反应好慢!!!
VS2010一点不卡。
VS2010不支持C99,不能搭建FFmpeg环境,刚安装了VS2015。。可以搭建FFmpeg环境了,但太卡了。。。
如果再换成VS2019,我怕电脑根本运行不起来VS2019。。。
2022-05-24 13:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
回复 6楼 追梦人zmrghy
VS 太卡的话,可以用 MinGW64 等编译器,我试验了一下

a. 在 https:// 下载 codeblocks,它自带 gcc 11.2.0,之所以用nosetup版本,是因为我懒得安装
b. 解压,然后打开 Code::Blocks,在菜单的 Settings\Compiler\Global compiler settings\Toolchain executables 中填上解压目录里的 mingw64 目录
c. 新建一个C++控制台工程,在 main.cpp 中输入代码
#include <iostream>
#include <filesystem>
#include <algorithm>
using namespace std;

bool ReduceFileName( const std::filesystem::path& path )
{
    auto make_name_name = []( const std::wstring& filename )
    {
        size_t a = filename.find( L':' );
        if( a != std::wstring::npos )
        {
            a = filename.find_first_not_of( L"\t\n\v\f\r ", a+1 );
            size_t b = filename.find_first_of( L"((", a );
            b = filename.find_last_not_of( L"\t\n\v\f\r ", b-1 );
            return filename.substr( a, b+1-a );
        }
        return filename;
    };

    using namespace std::filesystem;
    try
    {
        for( auto& entry : directory_iterator(path) )
        {
            if( entry.is_regular_file() ) // 只处理常规文件
            {
                auto ext = entry.path().extension().generic_wstring(); // 扩展名
                std::for_each( begin(ext), end(ext), [](auto& c){if(c>=L'A'&&c<=L'Z') c+=L'a'-L'A';} ); // 扩展名转化成小写
                if( ext == L".mp4" )
                {
                    const auto& old_name = entry.path().stem().generic_wstring();
                    const auto& new_name = make_name_name( old_name );
                    if( old_name != new_name )
                    {
                        wcout << old_name << L" -> " << new_name;

                        auto new_path = entry.path().parent_path()/(new_name+L".mp4");
                        if( exists(new_path) ) // 新文件名已经存在
                        {
                            wcout << L" --- [failed] 文件已存在";
                        }
                        else
                        {
                            std::error_code ec;
                            rename( entry, new_path, ec );
                            if( ec )
                                cout << " --- [failed] " << ec.message();
                        }

                        wcout << L'\n';
                    }
                }
            }
        }
    }
    catch( const std::exception& e )
    {
        cout << "[failed] " << e.what() << '\n';
        return false;
    }
    return true;
}

int main( void )
{
    setlocale( LC_CTYPE, "" ); // 改了这一句

    ReduceFileName( u8R"(C:\Users\Administrator\Desktop\[WPF]JJDown\Download\)" ); // 使用 Unicode 可避免GBK认字不全
}


d. 我用windows自带的记事本打开 main.cpp,发现它是 ANSI 编码(其实是gbk编码),于是我在工程上点右键,选择 build options,在 Other compiler options 中输入
-finput-charset=GBK
-fexec-charset=GBK
-fwide-exec-charset=UTF-16LE
也就是告诉gcc编译器,源文件是gbk编码,可执行文件中char是gbk编码,wchar_t是utf-16 little-endian编码

e. 按F9,运行
2022-05-24 16:51
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:406
专家分:190
注 册:2021-4-9
收藏
得分:0 
回复 7楼 rjsp
谢谢!!!
刚刚下载了,有时间了,安装学习一下。。。
2022-05-24 23:39
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:406
专家分:190
注 册:2021-4-9
收藏
得分:0 
回复 7楼 rjsp
第一次用,这个软件。。。
好不容易,找到了汉化包。。。
编译器,是选这个吗?
这样配置对吗?
图片附件: 游客没有浏览图片的权限,请 登录注册


又出错了。。。
图片附件: 游客没有浏览图片的权限,请 登录注册


测试用的目录和文件。
[WPF]JJDown.rar (2.67 KB)


[此贴子已经被作者于2022-5-26 02:15编辑过]

2022-05-26 02:00
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
你没设置编译参数吧?
这样吧,你Code::Blocks关闭,用记事本把 main.cpp 另存为 UTF-8 格式
然后打开 Code::Blocks,编译参数加
-finput-charset=UTF-8
-fexec-charset=GBK
-fwide-exec-charset=UTF-16LE

我把工程打包给你,你试试
codeblocks_console_cpp001.zip (2.38 KB)
2022-05-26 10:35
快速回复:求助,全注释掉,留个空函数,还是有错。。。
数据加载中...
 
   



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

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