永久删除文件C ++

时间:2012-09-24 23:01:51

标签: c++ winapi

我遇到一个简单的问题,我无法找到一个简单的解决方案。我试图永久删除文件。我不是在寻找最难以使数据无法恢复的方法,我只是不希望它坐在回收站中。我有两个问题。

  1. 是获取回收站路径的方法吗?我的想法是,一旦我有了路径,我就可以使用remove()从那里永久删除它。以下对我失败,返回一个完全不同的路径,而不是回收站的路径。也许我错过了一个论点。

    char RecycleBin[_MAX_PATH];   
    SHGetSpecialFolderPath(NULL, RecycleBin, CSIDL_BITBUCKET, FALSE);
    
  2. 是否有永久删除文件的win32api调用?

  3. 感谢阅读。

    编辑1:

    根据下面的答案,我一直在使用_unlink ()函数,但它的行为并不完全符合我的要求。我需要一些东西来获取桌面,然后将文件添加到该字符串并将该字符串传递给将删除该文件作为参数的函数。以下是我尝试unlink的方法。如果我这样取消链接 - 它可以工作:

         char path [] = "C:\\Users\\testuser\\Desktop\\test.dat";
    
         _unlink( path );
    

    但是,如果我尝试以下两种方式,它就会失败。

        char DesktopPath[_MAX_PATH];
    
        SHGetSpecialFolderPath(NULL, DesktopPath, CSIDL_DESKTOPDIRECTORY, FALSE);
    
        strcat ( DesktopPath, "\\test.dat" );
    
        _unlink ( DesktopPath );
    

    这种方式(添加引号)也失败了。

        char DesktopPath[_MAX_PATH];
    
        char final_path [] = "\"";
    
        char quotes [] = "\"";
    
        SHGetSpecialFolderPath(NULL, DesktopPath, CSIDL_DESKTOPDIRECTORY, FALSE);
    
        strcat ( DesktopPath, "\\test.dat" );
    
        strcat ( DesktopPath, quotes );
    
        strcat ( final_path, DesktopPath );
    
        _unlink ( final_path );
    

    以上两种方式都可以编译并运行正常,但它实际上并没有删除文件。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用POSIX函数unlink (_unlink for MSVC2005+)

_unlink("file.ext"); //delete file without sending to Recycle Bin