hur.cn - 华软网

 热门搜索

SHFileOperation 参数问题 TCHAR LPTSTR

  作者:未知    来源:网络    更新时间:2011/6/10
我现在想删除目录,内含文件,使用了SHFileOperation 方法。
 
如果 LPTSTR lpstr = "e:\\a";
        SHFILEOPSTRUCT shFileOp;
shFileOp.hwnd = NULL;
shFileOp.wFunc = FO_DELETE;
shFileOp.pFrom = ch;
shFileOp.pTo = NULL;
shFileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATION;

        SHFileOperation(&shFileOp);  

这个能行

现在因为我接收到的是 TCHAR ch[512];  //ch = "e:\\a"
    SHFileOperation(&shFileOp); 
这个就不行  返回值为1026

怎么改ch呢
---华软 网友回答---
 TCHAR ch[512]= _T("e:\\a");
  SHFILEOPSTRUCT shFileOp;
shFileOp.hwnd = NULL;
shFileOp.wFunc = FO_DELETE;
shFileOp.pFrom = ch;
shFileOp.pTo = NULL;
shFileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATION;

  SHFileOperation(&shFileOp);   
这个行不
---华软网友回复---
TCHAR ch[512]  是从外面得到的 char类型  
之后还要在后面加一些  到达正确目录路径
---华软网友回复---
你的ch是否符合0 terminated string
---华软网友回复---
LPTSTR lpstr = "e:\\a";
  SHFILEOPSTRUCT shFileOp;
shFileOp.hwnd = NULL;
shFileOp.wFunc = FO_DELETE;
shFileOp.pFrom = lpstr;
shFileOp.pTo = NULL;
shFileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATION;

这样也不行吗?
---华软网友回复---
引用 4 楼 visualeleven 的回复:
LPTSTR lpstr = "e:\\a";
  SHFILEOPSTRUCT shFileOp;
shFileOp.hwnd = NULL;
shFileOp.wFunc = FO_DELETE;
shFileOp.pFrom = lpstr;
shFileOp.pTo = NULL;
shFileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATI……


这样行  但是要删除的目录名 是从外面获取的  是TCHAR 类型的    LPTSTR lpstr = "e:\\a"; 就是预先定义的了
---华软网友回复---
外部获取的格式对不对
---华软网友回复---
TCHAR ch[512];

int j = sprintf(ch,"%s",m_szPath);   //char  m_szPath[MAX_PATH + 1];
sprintf(ch+j,"%s","\\file\\");

int i = sprintf(ch,"%s",ch);
sprintf(ch+i,"%s",m_strItem);    // CString  m_strItem   值为"20110611"

SHFILEOPSTRUCT shFileOp;
shFileOp.hwnd = NULL;
    shFileOp.wFunc = FO_DELETE;
shFileOp.pFrom = ch;
shFileOp.pTo = NULL;
shFileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATION;

int kkk = SHFileOperation(&shFileOp);

就是想删除 "E:\\...\\file\\20110611" 这个目录  里面有几个文件
---华软网友回复---
调用SHFileOperation前用MessageBox把ch显示出来
---华软网友回复---
估计组合路径时出了问题,另外注意使用相对路径会有线程安全问题

    先用 shFileOp.pFrom = "E:\\...\\file\\20110611";直接验证下,能工作时

    再用
        PathCombine
   或者
       StringCchPrintf(ch, 512, _T("%s\\file\\%s"), m_szPath, m_strItem);
---华软网友回复---
单步跟下吧,到底是哪的错,估计接收的就不对
---华软网友回复---
引用 8 楼 lactoferrin 的回复:
调用SHFileOperation前用MessageBox把ch显示出来


显示是正确的
---华软网友回复---
SHFILEOPSTRUCT shFileOp;
shFileOp.hwnd = NULL;
shFileOp.wFunc = FO_DELETE;
shFileOp.pFrom = ch;
shFileOp.pTo = NULL;
shFileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATION;

参数都对的  

就是到  int kkk = SHFileOperation(&shFileOp);  返回1026  

上网查  说是最后要加上"\0"  但是我加了 也没有

---华软网友回复---
我后来改用 RemoveDirectory
 
因为文件夹里都是 以"*.mp4" 类型的文件  所以 我先把文件删除,然后再删除目录
 而结果是目录里的文件删除了,但是目录仍在 RemoveDirectory 返回不正确
---华软网友回复---
你接收的代码是什么
---华软网友回复---
什么接收的代码
---华软网友回复---
引用 9 楼 sunshine_msdn 的回复:
估计组合路径时出了问题,另外注意使用相对路径会有线程安全问题

  先用 shFileOp.pFrom = "E:\\...\\file\\20110611";直接验证下,能工作时

  再用
  PathCombine
  或者
  StringCchPrintf(ch, 512, _T("%s\\file\\%s"), m_szPath, m_strItem);


shFileOp.pFrom = "E:\\...\\file\\20110611";  这个是可行的

我输出ch 是正确路径
---华软网友回复---
字符串需要"\0\0"结尾.
---华软网友回复---
引用 17 楼 luciferstar 的回复:
字符串需要"\0\0"结尾.


我也试过了
---华软网友回复---
TCHAR ch[512];

sprintf(ch,"%s",m_szPath);

int i = sprintf(ch,"%s",ch);
sprintf(ch+i,"%s","/0");  或者  sprintf(ch+i,"%s","/0/0");

ch输出 路径显示正确
 但都不行
---华软网友回复---
sprintf(ch+i,"%s","\0"); 或者 sprintf(ch+i,"%s","\0\0");
---华软网友回复---
引用 20 楼 lactoferrin 的回复:
sprintf(ch+i,"%s","\0"); 或者 sprintf(ch+i,"%s","\0\0");


呵呵   是我抄错了    
程序是这么写的
---华软网友回复---
找到问题了 

char ch[512];
ZeroMemory(ch,sizeof(ch));

这样子就行了      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。