Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我能';无法使用SHFILE操作删除文件_C_Windows_Winapi - Fatal编程技术网

C 我能';无法使用SHFILE操作删除文件

C 我能';无法使用SHFILE操作删除文件,c,windows,winapi,C,Windows,Winapi,我想将文件删除到回收站。我正在使用这个代码 SHFILEOPSTRUCT FileOp; FileOp.hwnd = NULL; FileOp.wFunc=FO_DELETE; FileOp.pFrom= lpFileName; //it's my value \\?\C:\WorkFolder\qweqw.docx FileOp.pTo = NULL; FileOp.fFlags=FOF_ALLOWUNDO|FOF_NOCONFIRMATIO

我想将文件删除到回收站。我正在使用这个代码

    SHFILEOPSTRUCT FileOp;
    FileOp.hwnd = NULL;
    FileOp.wFunc=FO_DELETE; 
    FileOp.pFrom= lpFileName; //it's my value  \\?\C:\WorkFolder\qweqw.docx
    FileOp.pTo = NULL;
    FileOp.fFlags=FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
    FileOp.hNameMappings=NULL;      
    int t_res = SHFileOperation(&FileOp); // t_res = 124
    return t_res;
我做错了什么?提前谢谢

  • 什么是
    t_res
    ,它应该给出错误代码并说明原因
  • 请注意,
    pFrom
    获取文件,而不是单个文件,因此应使用两个零终止缓冲区,请参阅:
  • 尽管此成员声明为单个以null结尾的字符串, 它实际上是一个缓冲区,可以容纳多个空分隔文件 名字。每个文件名都以一个空字符结尾。这个 最后一个文件名以双空字符(“\0\0”)终止,以 指示缓冲区的结束

    错误代码为:

    DE_INVALIDFILES 0x7C源或目标或两者中的路径无效


    您没有提到对此的任何分析,因此我的建议是深入研究文件名是如何表示的。这是正确的编码吗?

    您收到了什么错误?t\u res包含什么?对GetLastError()的调用返回什么?请尝试与我们分享。Error=124(Error\u INVALID\u LEVEL)@Sasha请用这些额外信息更新您的问题。@Sasha,Deanna:124没有
    Error\u INVALID\u LEVEL
    ,而是
    DE\u INVALIDFILES
    (请参阅下面的展开)。API函数支持\\?\格式,但我不一定期望它对SHFileOperation之类的Shell函数起作用。尝试向其传递一个普通路径,c:\WorkFolder\qweqw.docx.1。我在t_res error=124附近添加了注释。2.我添加了\0\0,错误是相同的。我猜它会看到您的第一个文件,然后您不会使用额外的零字符终止,它会继续解析以获取第二个文件名,它不是有效的名称,因此会出现错误。我建议您检查调试器中的内存,是否发送您认为应该存在的数据。最有可能的情况是文件名不正确。