最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)對(duì)回收站里的文件進(jìn)行操作的示例代碼

 更新時(shí)間:2023年06月25日 09:29:09   作者:逃逸的卡路里  
這篇文章主要為大家詳細(xì)介紹了C++如何使用代碼對(duì)回收站里的文件進(jìn)行操作,譬如文件的刪除與恢復(fù)等,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧

方式一:設(shè)置不同的SHFILEOPSTRUCT結(jié)構(gòu)體,調(diào)用SHFileOperation函數(shù)就可以實(shí)現(xiàn)拷貝、刪除、移動(dòng)等文件操作

SHGetSpecialFolderLocation函數(shù):

原型:

HRESULT SHGetSpecialFolderLocation(HWND hwnd, int csidl,
PIDLIST_ABSOLUTE* ppidl)

該函數(shù)用于獲取特殊文件夾的物理路徑。它接受以下參數(shù):

  • hwnd:可選參數(shù),指定父窗口的句柄。如果不需要與窗口關(guān)聯(lián),可以設(shè)置為NULL。
  • csidl:表示特殊文件夾的標(biāo)識(shí)符(CSIDL),用于指定要獲取的文件夾。
  • ppidl:一個(gè)指向PIDLIST_ABSOLUTE類型的指針,用于接收文件夾的ITEMIDLIST。

功能:根據(jù)給定的特殊文件夾標(biāo)識(shí)符,該函數(shù)將返回與之對(duì)應(yīng)的文件夾的物理路徑。通過該函數(shù)獲取回收站文件夾的物理路徑可以進(jìn)一步操作其中的文件。

SHGetPathFromIDList函數(shù):

原型:

BOOL SHGetPathFromIDList(PCIDLIST_ABSOLUTE pidl, LPWSTR pszPath)

該函數(shù)用于根據(jù)ITEMIDLIST(在這里是通過SHGetSpecialFolderLocation獲得的PIDLIST_ABSOLUTE)返回文件夾的路徑。

功能:該函數(shù)將ITEMIDLIST轉(zhuǎn)換為文件夾的字符串路徑。

SHFileOperation函數(shù):

原型:

int SHFileOperation(const SHFILEOPSTRUCT* lpFileOp)

該函數(shù)用于執(zhí)行文件操作,如復(fù)制、移動(dòng)和刪除等。它接受以下參數(shù):

lpFileOp:指向SHFILEOPSTRUCT結(jié)構(gòu)的指針,描述要執(zhí)行的文件操作。

功能:該函數(shù)執(zhí)行文件操作,可以將文件復(fù)制、移動(dòng)或刪除到指定位置,包括回收站??梢栽O(shè)置FOF_ALLOWUNDO標(biāo)志以啟用撤銷功能。

SHFILEOPSTRUCT結(jié)構(gòu)體:

定義:

typedef struct _SHFILEOPSTRUCT
{
HWND hwnd;
UINT wFunc;
LPCWSTR pFrom;
LPCWSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCWSTR lpszProgressTitle;
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;

成員變量:

  • hwnd:可選參數(shù),表示父窗口的句柄。 wFunc:表示要執(zhí)行的文件操作類型,如復(fù)制、移動(dòng)、刪除等。
  • pFrom:指向源文件/文件夾的路徑字符串。 pTo:指向目標(biāo)文件/文件夾路徑字符串。
  • fFlags:控制文件操作的標(biāo)志位,如FOF_ALLOWUNDO、FOF_NOCONFIRMATION等。
  • fAnyOperationsAborted:如果用戶取消了任何一個(gè)操作,則為TRUE。
  • hNameMappings:保留參數(shù),應(yīng)設(shè)置為NULL。 lpszProgressTitle:可選參數(shù),用于在進(jìn)度對(duì)話框中顯示自定義標(biāo)題。

該結(jié)構(gòu)描述了要進(jìn)行的文件操作的詳細(xì)信息,包括源文件/文件夾路徑、目標(biāo)路徑、操作類型和標(biāo)志等。傳遞此結(jié)構(gòu)給SHFileOperation函數(shù)可執(zhí)行相應(yīng)的文件操作。

代碼示例:

使用Shell API:你可以使用Windows的Shell API來訪問回收站,并獲取回收的文件信息。

1、使用SHGetSpecialFolderLocation函數(shù)通過指定回收站的CSIDL_BITBUCKET標(biāo)識(shí)符來獲取回收站的物理路徑。

2、使用SHGetPathFromIDList函數(shù)將回收站路徑轉(zhuǎn)換為字符串格式存儲(chǔ)在sFolderPath中。

3、構(gòu)建搜索路徑sSearchPath,用于遍歷回收站文件夾中的文件。

4、使用FindFirstFile和FindNextFile函數(shù)遍歷回收站文件夾中的每個(gè)文件。

5、對(duì)于每個(gè)文件,使用_tprintf函數(shù)在控制臺(tái)上輸出其文件名和完整路徑。

6、最后使用FindClose關(guān)閉文件搜索句柄。

#include <Windows.h>
#include <ShlObj.h>
int main() {
    // 獲取回收站的路徑
    LPITEMIDLIST pidlBin;
    SHGetSpecialFolderLocation(NULL, CSIDL_BITBUCKET, &pidlBin);
    // 將回收站的路徑轉(zhuǎn)換為字符串格式
    TCHAR szFolderPath[MAX_PATH];
    SHGetPathFromIDList(pidlBin, szFolderPath);
    // 構(gòu)建搜索路徑
    TCHAR szSearchPath[MAX_PATH];
    _stprintf_s(szSearchPath, MAX_PATH, _T("%s\\*"), szFolderPath);
    // 遍歷回收站文件夾中的文件
    WIN32_FIND_DATA findData;
    HANDLE hFind = FindFirstFile(szSearchPath, &findData);
    if (hFind != INVALID_HANDLE_VALUE) {
        do {
            // 輸出文件名和完整路徑
            _tprintf(_T("File: %s\n"), findData.cFileName);
            _tprintf(_T("Path: %s\\%s\n"), szFolderPath, findData.cFileName);
        } while (FindNextFile(hFind, &findData));
        FindClose(hFind);
    }
    return 0;
}

使用Shell API的SHFILEOPSTRUCT結(jié)構(gòu)和SHFileOperation函數(shù)來執(zhí)行文件操作,包括將文件恢復(fù)到原始路徑。

#include <Windows.h>
#include <ShlObj.h>
int main() {
    // 設(shè)置恢復(fù)操作的源文件路徑和目標(biāo)文件夾路徑
    TCHAR szSourceFilePath[] = _T("C:\\RecycleBin\\file.txt");
    TCHAR szDestinationFolderPath[] = _T("C:\\OriginalPath");
    // 構(gòu)建SHFILEOPSTRUCT結(jié)構(gòu)
    SHFILEOPSTRUCT fileOpStruct;
    ZeroMemory(&fileOpStruct, sizeof(SHFILEOPSTRUCT));
    fileOpStruct.wFunc =_RENAME;
    fileOpStruct.pFrom = szSourceFilePath;
    fileOpStruct.pTo = szDestinationFolderPath;
    fileOpStruct.fFlags = FOF_ALLOWUNDO;
    // 執(zhí)行恢復(fù)操作
    int result = SHFileOperation(&fileOpStruct);
    if (result == 0) {
        // 恢復(fù)成功
        // ...
    }
    return 0;
}

刪除回收站里的文件:

#include <Windows.h>
#include <Shlobj.h>
#include <iostream>
int main() {
    LPITEMIDLIST pidlBin;
    SHGetSpecialFolderLocation(NULL, CSIDL_BITBUCKET, &pidlBin);
    // 構(gòu)建文件操作的結(jié)構(gòu)體
    SHFILEOPSTRUCT fileOpStruct;
    ZeroMemory(&fileOpStruct, sizeof(SHFILEOPSTRUCT));
    fileOpStruct.hwnd = NULL;  // 父窗口句柄(可選)
    fileOpStruct.wFunc = FO_DELETE;  // 執(zhí)行刪除OpStruct.pFrom = reinterpret_cast<LPCWSTR>(pidlBin);  // 源文件路徑
    fileOpStruct.fFlags = FOF_ALLOWUNDO | FOF_NO_UI;  // 標(biāo)志位
    int result = SHFileOperation(&fileOpStruct);  // 執(zhí)行文件操作
    if (result == 0 && !fileOpStruct.fAnyOperationsAborted) {
        std::cout << "文件刪除成功!" << std::endl;
    } else {
        std::cerr << "文件刪除失?。? << result << std::endl;
    }
    CoTaskMemFree(pidlBin);  // 釋放內(nèi)存
   ;
}

方式二:使用第三方庫(kù),例如Boost和Qt等,它供了更高級(jí)的文件系統(tǒng)操作接口

以Boost庫(kù)為例:

Boost是一個(gè)開源的C++庫(kù)集合,增強(qiáng)功能和性能。它提供了許多高質(zhì)量、可移植且經(jīng)過廣泛測(cè)試的模塊和組件,覆蓋了從基本數(shù)據(jù)結(jié)構(gòu)到高級(jí)功能的各個(gè)方面。下面是Boost庫(kù)中一些常用模塊和其功能的簡(jiǎn)要介紹:

1、Boost.Filesystem(文件系統(tǒng)):該模塊為C++操作文件系統(tǒng)提供了便捷且跨平臺(tái)的接口,包括文件路徑操作、目錄遍歷、文件訪問等。

  • boost::filesystem::path:表示文件或目錄的路徑,提供了豐富的路徑操作函數(shù),如獲取父路徑、拼接路徑、判斷路徑是否存在等。
  • boost::filesystem::directory_iterator:迭代器,用于遍歷指定目錄下的文件和子目錄。
  • boost::filesystem::remove():刪除指定路徑的文件或目錄。
  • boost::filesystem::copy():將文件或整個(gè)目錄復(fù)制到指定位置。

2、Boost.Regex(正則表達(dá)式):該模塊提供了對(duì)正則表達(dá)式的支持,允許通過正則表達(dá)式在文本中進(jìn)行模式匹配和搜索。

  • boost::regex:表示一個(gè)正則表達(dá)式對(duì)象。 boost::regex_match():用指定的正則表達(dá)式對(duì)字符串進(jìn)行完全匹配。
  • boost::regex_search():在字符串中搜索滿足正則表達(dá)式的子串。

3、Boost.DateTime(日期和時(shí)間):該模塊提供了日期、時(shí)間和時(shí)間間隔的處理功能,包括日期時(shí)間的表示、計(jì)算、格式化等。

  • boost::posix_time::ptime:表示一個(gè)精確到毫秒的時(shí)間點(diǎn)。 boost::gregorian::date:表示一個(gè)日期。
  • boost::date_time::duration:表示一段時(shí)間間隔。
  • boost::posix_time::time_duration:表示時(shí)間的長(zhǎng)度。
  • boost::date_time::period_formatter:用于格式化日期和時(shí)間的類。

除上述模塊外,Boost庫(kù)還提供了許多其他模塊,包括但不限于多線程、智能指針、數(shù)學(xué)庫(kù)、網(wǎng)絡(luò)編程、序列化等。這些模塊為C++開發(fā)者提供了豐富的工具和功能,方便開發(fā)高效且可靠的應(yīng)用程序。

獲取回收站文件信息:

#include <boost/filesystem.hpp>
#include <iostream>
namespace fs = boost::filesystem;
int main() {
    // 獲取回收站的路徑
    fs::path recycleBinPath = fs::path(fs::current_path()) / ".Trash";
    // 遍歷回收站文件夾中的文件
    for (const auto& entry : fs::directory_iterator(recycleBinPath)) {
        // 輸出文件名以及路徑
        std::cout << "File: " << entry.path().stem().string() << std::endl;
        std::cout << "Path: " << entry.path().string() << std::endl;
    }
    return 0;
}

使用Boost庫(kù)的boost::filesystem::rename函數(shù)將文件恢復(fù)到原始路徑:

#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
int main() {
    // 設(shè)置恢復(fù)操作的源文件路徑和目標(biāo)文件夾路徑
    fs::path sourceFilePath = "C:\\RecycleBin\\file.txt";
    fs::path destinationFolderPath = "C:\\OriginalPath";
    // 執(zhí)行恢復(fù)操作
    fs::rename(sourceFilePath, destinationFolderPath / sourceFilePath.filename());
    return 0;
}

以上就是C++實(shí)現(xiàn)對(duì)回收站里的文件進(jìn)行操作的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C++操作回收站文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++ 位運(yùn)算的具體實(shí)現(xiàn)

    C++ 位運(yùn)算的具體實(shí)現(xiàn)

    位運(yùn)算直接對(duì)內(nèi)存數(shù)據(jù)進(jìn)行操作,不需要轉(zhuǎn)換成十進(jìn)制,因此處理速度非???本文主要介紹了C++ 位運(yùn)算的具體實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • C++反射的一種實(shí)現(xiàn)方法詳解

    C++反射的一種實(shí)現(xiàn)方法詳解

    這篇文章主要給大家介紹了關(guān)于C++反射的一種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 關(guān)于C++的.cpp文件運(yùn)行全過程

    關(guān)于C++的.cpp文件運(yùn)行全過程

    這篇文章主要介紹了C++的.cpp文件運(yùn)行全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++使用new操作符動(dòng)態(tài)分配的實(shí)現(xiàn)

    C++使用new操作符動(dòng)態(tài)分配的實(shí)現(xiàn)

    本文主要介紹了C++使用new操作符動(dòng)態(tài)分配的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-06-06
  • 使用C++實(shí)現(xiàn)簡(jiǎn)單的文章生成器

    使用C++實(shí)現(xiàn)簡(jiǎn)單的文章生成器

    這篇文章主要為大家詳細(xì)介紹了鵝湖使用C++實(shí)現(xiàn)簡(jiǎn)單的狗屁不通文章生成器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下
    2024-03-03
  • C語言實(shí)現(xiàn)JSON解析器的方法步驟

    C語言實(shí)現(xiàn)JSON解析器的方法步驟

    JSON是一種非常流行的數(shù)據(jù)格式,本文主要介紹了C語言實(shí)現(xiàn)JSON解析器的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • C++ 使用PrintWindow實(shí)現(xiàn)窗口截圖功能

    C++ 使用PrintWindow實(shí)現(xiàn)窗口截圖功能

    這篇文章主要介紹了C++ 如何使用PrintWindow實(shí)現(xiàn)窗口截圖功能,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • Qt中QMapIterator檢測(cè)是否為空的實(shí)現(xiàn)

    Qt中QMapIterator檢測(cè)是否為空的實(shí)現(xiàn)

    本文主要介紹了Qt中QMapIterator檢測(cè)是否為空的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • c語言中如何修改文件中間的幾個(gè)字節(jié)

    c語言中如何修改文件中間的幾個(gè)字節(jié)

    工作中碰到一個(gè)問題,如何只修改文件中間的幾個(gè)字節(jié),而其他的內(nèi)容不變。這個(gè)問題看似簡(jiǎn)單,但是很多人估計(jì)都不知道怎么做。我開始seek到文件的特定的位置,然后寫文件,但是使用的文件打開模式不對(duì),文件不是被清空,就是被截?cái)?,達(dá)不到效果
    2020-10-10
  • 淺談c語言中轉(zhuǎn)義字符的用法及注意事項(xiàng)

    淺談c語言中轉(zhuǎn)義字符的用法及注意事項(xiàng)

    下面小編就為大家?guī)硪黄獪\談c語言中轉(zhuǎn)義字符的用法及注意事項(xiàng)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08

最新評(píng)論

巨鹿县| 墨竹工卡县| 双柏县| 新平| 甘肃省| 新河县| 焉耆| 准格尔旗| 阿鲁科尔沁旗| 湖南省| 湛江市| 康马县| 利津县| 磴口县| 晋宁县| 金华市| 贵南县| 金川县| 黄梅县| 平度市| 孟村| 岳池县| 进贤县| 宜君县| 岳西县| 临猗县| 西平县| 广德县| 蓬溪县| 双江| 顺昌县| 蕉岭县| 合肥市| 河源市| 阿克陶县| 青神县| 通化县| 石台县| 曲阳县| 泰兴市| 博兴县|