VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 2135|回复: 26

求助

[复制链接]
81_avatar_middle
最佳答案
0 
在线会员 发表于 2020-1-5 11:22:42 | 显示全部楼层 |阅读模式
本帖最后由 wl1383838438 于 2020-1-5 12:07 编辑

#include <windows.h>
#include <tchar.h>
#include <iostream>
using namespace std;

BOOL EnumFiles(LPCTSTR lpszPath, LPCTSTR lpszType)//文件遍历
{
        TCHAR szPath[MAX_PATH] = { 0 };
        _stprintf(szPath, _T("%s\\%s"), lpszPath, lpszType);//将字符串连接组成一起赋给szPath
        DWORD as;
        as = GetLastError();
        WIN32_FIND_DATA FindData = { 0 };
        HANDLE hFind = FindFirstFile(szPath, &FindData);
        if (hFind == INVALID_HANDLE_VALUE) return FALSE;

        BOOL bRet = FALSE;
        do
        {
                bRet = FindNextFile(hFind, &FindData);
                if (!bRet) break;

                if ((FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) > 0)
                {
                        if (_tcscmp(FindData.cFileName, _T(".")) == 0 || _tcscmp(FindData.cFileName, _T("..")) == 0) continue;

                        //文件夹
                        cout << "文件夹:";

                }
                else
                {
                        if ((FindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) > 0)
                        {
                                //
                        }

                        //文件
                        cout << "文件:";
                }

                wcout << FindData.cFileName << endl;

        } while (bRet);

        return TRUE;
}

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
        EnumFiles(_T("C:\\Windows"), _T("*.*"));
        return 0;
}

int _tmain(int argc, TCHAR* argv[])
{
        EnumFiles(_T("C:\\Windows"), _T("*.*"));
        return 0;
}

1>------ 已启动生成: 项目: App2, 配置: Debug Win32 ------
1>App2.cpp
1>D:\Work App\App2\App2.cpp(9,1): error C4996: '_swprintf': This function or variable may be unsafe. Consider using swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>D:\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_wstdio.h(1446): message : 参见“_swprintf”的声明
1>已完成生成项目“App2.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C4996        '_swprintf': This function or variable may be unsafe. Consider using swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.        App2        D:\Work App\App2\App2.cpp        9       




上一篇:怎么删除非空文件夹
下一篇:有什么函数能弹出一个小框来直接输出文字吗?
75_avatar_middle
最佳答案
23 
online_supermod 发表于 2020-1-5 12:10:13 | 显示全部楼层
求助    第一段出现C4996的那个代码  你把它性能警告  禁用就可以看图   不是什么错误   性能警告。禁用之后在编译就可以了
58_avatar_middle
最佳答案
58 
online_vip 发表于 2020-1-5 11:40:38 | 显示全部楼层
'_swprintf': This function or variable may be unsafe. Consider using swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details
已经说的很清晰了呀,要不用 _swprintf_s,要不#define _CRT_SECURE_NO_WARNINGS 弃用
58_avatar_middle
最佳答案
58 
online_vip 发表于 2020-1-5 11:49:26 | 显示全部楼层
将_swprintf(),替换成swprintf_s(),swprintf_s()的用法百度一下就有。
如果不想用s版的,可以使用这个宏开关,#define _CRT_SECURE_NO_WARNINGS
81_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-5 11:53:31 | 显示全部楼层
#include <windows.h>
#include <tchar.h>
#include <iostream>
using namespace std;

bool DeleteFiles(char* lpszPath)
{
        SHFILEOPSTRUCT FileOp = { 0 };
        FileOp.fFlags = FOF_ALLOWUNDO |   //允许放回回收站
                FOF_NOCONFIRMATION; //不出现确认对话框
        FileOp.pFrom = lpszPath;
        FileOp.pTo = NULL;      //一定要是NULL
        FileOp.wFunc = FO_DELETE;    //删除操作
        return SHFileOperation(&FileOp) == 0;
}

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
        //EnumFiles(_T("C:\\Windows"), _T("*.*"));
        DeleteFiles("C:\\delete\0\0");
        DWORD words = GetLastError();
        return 0;
}

严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C2440        “=”: 无法从“char *”转换为“PCZZWSTR”        App2        D:\Work App\App2\App2.cpp        11       
错误(活动)        E0513        不能将 "char *" 类型的值分配到 "PCZZWSTR" 类型的实体        App2        D:\Work App\App2\App2.cpp        11       
错误(活动)        E0167        "const char *" 类型的实参与 "char *" 类型的形参不兼容        App2        D:\Work App\App2\App2.cpp        20       
错误        C2664        “bool DeleteFiles(char *)”: 无法将参数 1 从“const char [12]”转换为“char *”        App2        D:\Work App\App2\App2.cpp        20       

点评

https://www.bilibili.com/video/av38413272 先把这课的前三节看一下,不用全懂。  发表于 2020-1-5 12:03
75_avatar_middle
最佳答案
23 
online_supermod 发表于 2020-1-5 11:57:06 | 显示全部楼层
墨寒666 发表于 2020-1-5 11:53
#include
#include
#include

这是syc的那一节课呢   朋友,我去看看源码,帮你找找错误顺带给你能运行的源码
58_avatar_middle
最佳答案
58 
online_vip 发表于 2020-1-5 12:00:20 | 显示全部楼层
墨寒666 发表于 2020-1-5 11:53
#include
#include
#include
  1. #include <windows.h>
  2. #include <tchar.h>
  3. #include <iostream>
  4. using namespace std;

  5. bool DeleteFiles(TCHAR* lpszPath)
  6. {
  7.         SHFILEOPSTRUCT FileOp = { 0 };
  8.         FileOp.fFlags = FOF_ALLOWUNDO |   //允许放回回收站
  9.                 FOF_NOCONFIRMATION; //不出现确认对话框
  10.         FileOp.pFrom = lpszPath;
  11.         FileOp.pTo = NULL;      //一定要是NULL
  12.         FileOp.wFunc = FO_DELETE;    //删除操作
  13.         return SHFileOperation(&FileOp) == 0;
  14. }

  15. int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
  16. {
  17.         //EnumFiles(_T("C:\\Windows"), _T("*.*"));
  18.         DeleteFiles(L"C:\\delete\0\0");
  19.         DWORD words = GetLastError();
  20.         return 0;
  21. }
复制代码
81_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-5 12:09:45 | 显示全部楼层

严重性        代码        说明        项目        文件        行        禁止显示状态
错误(活动)        E0007        无法识别的标记        App2        D:\Work App\App2\App2.cpp        9       
错误(活动)        E0007        无法识别的标记        App2        D:\Work App\App2\App2.cpp        9       
错误(活动)        E0007        无法识别的标记        App2        D:\Work App\App2\App2.cpp        12       
错误(活动)        E0007        无法识别的标记        App2        D:\Work App\App2\App2.cpp        12       
错误(活动)        E0007        无法识别的标记        App2        D:\Work App\App2\App2.cpp        12       
错误(活动)        E0007        无法识别的标记        App2        D:\Work App\App2\App2.cpp        12       
错误(活动)        E0007        无法识别的标记        App2        D:\Work App\App2\App2.cpp        13       
错误(活动)        E0007        无法识别的标记        App2        D:\Work App\App2\App2.cpp        13       
错误(活动)        E0167        "const wchar_t *" 类型的实参与 "TCHAR *" 类型的形参不兼容        App2        D:\Work App\App2\App2.cpp        20       
错误        C3873        “0xa0”: 不允许将此字符作为标识符的第一个字符        App2        D:\Work App\App2\App2.cpp        9       
错误        C3873        “0xa0”: 不允许将此字符作为标识符的第一个字符        App2        D:\Work App\App2\App2.cpp        9       
错误        C2146        语法错误: 缺少“;”(在标识符“&#160;”的前面)        App2        D:\Work App\App2\App2.cpp        9       
错误        C2065        “&#160;”: 未声明的标识符        App2        D:\Work App\App2\App2.cpp        9       
错误        C2146        语法错误: 缺少“;”(在标识符“&#160;”的前面)        App2        D:\Work App\App2\App2.cpp        9       
错误        C2065        “&#160;”: 未声明的标识符        App2        D:\Work App\App2\App2.cpp        9       
错误        C2143        语法错误: 缺少“;”(在“常数”的前面)        App2        D:\Work App\App2\App2.cpp        10       
错误        C3873        “0xa0”: 不允许将此字符作为标识符的第一个字符        App2        D:\Work App\App2\App2.cpp        12       
错误        C3873        “0xa0”: 不允许将此字符作为标识符的第一个字符        App2        D:\Work App\App2\App2.cpp        12       
错误        C3872        “0xa0”: 此字符不允许在标识符中使用        App2        D:\Work App\App2\App2.cpp        12       
错误        C3873        “0xa0”: 不允许将此字符作为标识符的第一个字符        App2        D:\Work App\App2\App2.cpp        12       
错误        C2065        “&#160;”: 未声明的标识符        App2        D:\Work App\App2\App2.cpp        12       
错误        C2146        语法错误: 缺少“;”(在标识符“&#160;&#160;”的前面)        App2        D:\Work App\App2\App2.cpp        12       
错误        C2065        “&#160;&#160;”: 未声明的标识符        App2        D:\Work App\App2\App2.cpp        12       
错误        C2146        语法错误: 缺少“;”(在标识符“&#160;”的前面)        App2        D:\Work App\App2\App2.cpp        12       
错误        C2065        “&#160;”: 未声明的标识符        App2        D:\Work App\App2\App2.cpp        12       
错误        C2146        语法错误: 缺少“;”(在标识符“FileOp”的前面)        App2        D:\Work App\App2\App2.cpp        13       
错误        C3873        “0xa0”: 不允许将此字符作为标识符的第一个字符        App2        D:\Work App\App2\App2.cpp        13       
错误        C3873        “0xa0”: 不允许将此字符作为标识符的第一个字符        App2        D:\Work App\App2\App2.cpp        13       
错误        C2065        “&#160;”: 未声明的标识符        App2        D:\Work App\App2\App2.cpp        13       
错误        C2146        语法错误: 缺少“;”(在标识符“&#160;”的前面)        App2        D:\Work App\App2\App2.cpp        13       
错误        C2065        “&#160;”: 未声明的标识符        App2        D:\Work App\App2\App2.cpp        13       
错误        C2143        语法错误: 缺少“;”(在“return”的前面)        App2        D:\Work App\App2\App2.cpp        14       
错误        C2664        “bool DeleteFiles(TCHAR *)”: 无法将参数 1 从“const wchar_t [12]”转换为“TCHAR *”        App2        D:\Work App\App2\App2.cpp        20       
81_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-5 12:11:25 | 显示全部楼层
wl1383838438 发表于 2020-1-5 11:57
这是syc的那一节课呢   朋友,我去看看源码,帮你找找错误顺带给你能运行的源码

这个是删除非空文件夹,课上没有说
75_avatar_middle
最佳答案
23 
online_supermod 发表于 2020-1-5 12:11:57 | 显示全部楼层
#include <windows.h>
#include <tchar.h>
#include <iostream>
using namespace std;

BOOL EnumFiles(LPCTSTR lpszPath, LPCTSTR lpszType)//文件遍历
{
        TCHAR szPath[MAX_PATH] = { 0 };
        _stprintf(szPath, _T("%s\\%s"), lpszPath, lpszType);//将字符串连接组成一起赋给szPath
        DWORD as;
        as = GetLastError();
        WIN32_FIND_DATA FindData = { 0 };
        HANDLE hFind = FindFirstFile(szPath, &FindData);
        if (hFind == INVALID_HANDLE_VALUE) return FALSE;

        BOOL bRet = FALSE;
        do
        {
                bRet = FindNextFile(hFind, &FindData);
                if (!bRet) break;

                if ((FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) > 0)
                {
                        if (_tcscmp(FindData.cFileName, _T(".")) == 0 || _tcscmp(FindData.cFileName, _T("..")) == 0) continue;

                        //文件夹
                        cout << "文件夹:";

                }
                else
                {
                        if ((FindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) > 0)
                        {
                                //
                        }

                        //文件
                        cout << "文件:";
                }

                wcout << FindData.cFileName << endl;

        } while (bRet);

        return TRUE;
}

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
        EnumFiles(_T("C:\\Windows"), _T("*.*"));
        return 0;
}

int _tmain(int argc, TCHAR* argv[])
{
        EnumFiles(_T("C:\\Windows"), _T("*.*"));
        return 0;
}

1>------ 已启动生成: 项目: App2, 配置: Debug Win32 ------
1>App2.cpp
1>D:\Work App\App2\App2.cpp(9,1): error C4996: '_swprintf': This function or variable may be unsafe. Consider using swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>D:\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_wstdio.h(1446): message : 参见“_swprintf”的声明
1>已完成生成项目“App2.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========




从新把这个代码  复制过去 按照我那个图,    右键项目属性  按照步骤开始  不要急  慢慢来
58_avatar_middle
最佳答案
58 
online_vip 发表于 2020-1-5 12:12:19 | 显示全部楼层
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
        EnumFiles(_T("C:\\Windows"), _T("*.*"));
        return 0;
}

int _tmain(int argc, TCHAR* argv[])
{
        EnumFiles(_T("C:\\Windows"), _T("*.*"));
        return 0;
}

为什么两个头文件,都加上了?
75_avatar_middle
最佳答案
23 
online_supermod 发表于 2020-1-5 12:12:44 | 显示全部楼层
墨寒666 发表于 2020-1-5 12:11
这个是删除非空文件夹,课上没有说

问题一个一个来 我先帮你把   这个代码跑起来再说
81_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-5 12:13:42 | 显示全部楼层
wl1383838438 发表于 2020-1-5 12:10
第一段出现C4996的那个代码  你把它性能警告  禁用就可以看图   不是什么错误   性能警告。禁用之后在编 ...

改了没变啊
58_avatar_middle
最佳答案
58 
online_vip 发表于 2020-1-5 12:15:27 | 显示全部楼层
是哪个错误,遍历文件的,还是清空回收站呢?
75_avatar_middle
最佳答案
23 
online_supermod 发表于 2020-1-5 12:15:32 | 显示全部楼层

你qq给我  远程给你调试一下
81_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-5 12:16:17 | 显示全部楼层
那个文件遍历的修改好了,现在那个删除非空文件夹的还没好
75_avatar_middle
最佳答案
23 
online_supermod 发表于 2020-1-5 12:17:17 | 显示全部楼层
墨寒666 发表于 2020-1-5 12:16
那个文件遍历的修改好了,现在那个删除非空文件夹的还没好

遍历文件的那个代码   修改哪里好的呢?  是重写了代码还是怎么样子呢?麻烦给一个反馈谢谢
81_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-5 12:19:35 | 显示全部楼层
wl1383838438 发表于 2020-1-5 12:17
遍历文件的那个代码   修改哪里好的呢?  是重写了代码还是怎么样子呢?麻烦给一个反馈谢谢

把那个_sprintf()的改为swprintf_s()
81_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-5 12:20:44 | 显示全部楼层
#include <windows.h>
#include <tchar.h>
#include <iostream>
using namespace std;

bool DeleteFiles(char* lpszPath)
{
        SHFILEOPSTRUCT FileOp = { 0 };
        FileOp.fFlags = FOF_ALLOWUNDO |   //允许放回回收站
                FOF_NOCONFIRMATION; //不出现确认对话框
        FileOp.pFrom = lpszPath;
        FileOp.pTo = NULL;      //一定要是NULL
        FileOp.wFunc = FO_DELETE;    //删除操作
        return SHFileOperation(&FileOp) == 0;
}

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
        //EnumFiles(_T("C:\\Windows"), _T("*.*"));
        DeleteFiles("C:\\delete\0\0");
        DWORD words = GetLastError();
        return 0;
}

int _tmain(int argc, TCHAR* argv[])
{
        //EnumFiles(_T("C:\\Windows"), _T("*.*"));
       
        return 0;
}
严重性        代码        说明        项目        文件        行        禁止显示状态
错误(活动)        E0513        不能将 "char *" 类型的值分配到 "PCZZWSTR" 类型的实体        App2        D:\Work App\App2\App2.cpp        11       
错误(活动)        E0167        "const char *" 类型的实参与 "char *" 类型的形参不兼容        App2        D:\Work App\App2\App2.cpp        20       
错误        D8021        无效的数值参数“/wdC4996”        App2        D:\Work App\App2\cl        1       
58_avatar_middle
最佳答案
58 
online_vip 发表于 2020-1-5 12:29:07 | 显示全部楼层
墨寒666 发表于 2020-1-5 12:20
#include
#include
#include

#include <windows.h>
#include <tchar.h>
#include <iostream>
using namespace std;

bool DeleteFiles(TCHAR* lpszPath)
{
    SHFILEOPSTRUCTW FileOp = { 0 };
    FileOp.fFlags = FOF_ALLOWUNDO |   //允许放回回收站
        FOF_NOCONFIRMATION; //不出现确认对话框
    FileOp.pFrom = lpszPath;
    FileOp.pTo = NULL;      //一定要是NULL
    FileOp.wFunc = FO_DELETE;    //删除操作
    return SHFileOperation(&FileOp) == 0;
}

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
    //EnumFiles(_T("C:\\Windows"), _T("*.*"));
    DeleteFiles(L"C:\\delete\0\0");
    DWORD words = GetLastError();
    return 0;
}
各版本有点小差异,我用的VS2010,没发现错误。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-12-8 16:18

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表