青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

vc文件復(fù)制和刪除及移動和重命名

VC 移動,復(fù)制,刪除文件(SHFileOperation)

總結(jié)一下SHFileOperation的用法,希望對大家有用

//刪除文件或者文件夾
bool DeleteFile(char * lpszPath)
{
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags = FOF_ALLOWUNDO |   //允許放回回收站
      FOF_NOCONFIRMATION; //不出現(xiàn)確認(rèn)對話框
FileOp.pFrom = lpszPath;
FileOp.pTo = NULL;      //一定要是NULL
FileOp.wFunc = FO_DELETE;    //刪除操作
return SHFileOperation(&FileOp) == 0;
}

//復(fù)制文件或文件夾
bool CopyFile(char *pTo,char *pFrom)
{
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags = FOF_NOCONFIRMATION|   //不出現(xiàn)確認(rèn)對話框
      FOF_NOCONFIRMMKDIR ; //需要時直接創(chuàng)建一個文件夾,不需用戶確定
FileOp.pFrom = pFrom;
FileOp.pTo = pTo;
FileOp.wFunc = FO_COPY;
return SHFileOperation(&FileOp) == 0;
}

//移動文件或文件夾
bool MoveFile(char *pTo,char *pFrom)
{
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags = FOF_NOCONFIRMATION|   //不出現(xiàn)確認(rèn)對話框
      FOF_NOCONFIRMMKDIR ; //需要時直接創(chuàng)建一個文件夾,不需用戶確定
FileOp.pFrom = pFrom;
FileOp.pTo = pTo;
FileOp.wFunc = FO_MOVE;
return SHFileOperation(&FileOp) == 0;   
}


//從命名文件或文件夾
bool ReNameFile(char *pTo,char *pFrom)
{
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags = FOF_NOCONFIRMATION;   //不出現(xiàn)確認(rèn)對話框
FileOp.pFrom = pFrom;
FileOp.pTo = pTo;
FileOp.wFunc = FO_RENAME;
return SHFileOperation(&FileOp) == 0;   
}

應(yīng)用舉例:
DeleteFile("d:\\PID\0\0");    //刪除一個文件夾
DeleteFile("d:\\PID.dsp\0d:\\PID.dsw\0\0"); //刪除多個文件
CopyFile("d:\0\0","D:\\MyProjects\\臨時程序\0\0");    //把"臨時程序"文件夾放到d盤下面
CopyFile("d:\0\0","D:\\MyProjects\\臨時程序\\PID.dsp\0D:\\MyProjects\\臨時程序\\PID.dsw\0"); //把PID.dsp和PID.dsw倆個文件放到d盤下面
ReNameFile("d:\\NewName","d:\\PID\0\0"); \\把PID文件夾從命名為NewName
注意:,如果你想把"D:\\MyProjects\\臨時程序\0\0"的文件夾復(fù)制到D盤下,并從命名為NewName,應(yīng)該這樣
CopyFile("d:\\NewName\0\0","D:\\MyProjects\\臨時程序\\*.*\0\0"); //把"臨時程序"文件夾復(fù)制到d盤下并從命名為"NewName"  

 

下面這個類方便你復(fù)制多個文件或文件夾,僅作參考
//連接多個路徑的類
class JOINFILEPATH
{
private:
int pos;
char* MultipleFilePath;
public:
JOINFILEPATH()
{
   pos=0;
   MultipleFilePath=new char[MAX_PATH*10];
   memset(MultipleFilePath,0,MAX_PATH*10);
}
~JOINFILEPATH() { delete []MultipleFilePath; }
void join(char *FilePath)
{
   while(*FilePath!='\0')
    MultipleFilePath[pos++]=*FilePath++;
   pos++;
}
char * GetMultipleFilePath() {return MultipleFilePath;}
};

//應(yīng)用舉例:
JOINFILEPATH FilePath;
FilePath.join("D:\\MyProjects\\臨時程序\\PID\\PID.dsp");
FilePath.join("D:\\MyProjects\\臨時程序\\PID\\PID.dsw");
CopyFile("d:\0\0",FilePath.GetMultipleFilePath());

1 pFrom和pTo最好以\0\0結(jié)尾(把存放路徑的字符串初始化為0),不然有可能會出錯,中間的每一個路徑用\0隔開
2 pFrom所指向的文件或文件夾(可以多個)會被復(fù)制或移動到pTo所指向的文件夾下面(假如文件夾不存在會詢問是否創(chuàng)建,當(dāng)然你也可以選擇直接創(chuàng)建)

參數(shù)詳解:

Typedef struct _ShFILEOPSTRUCT
{
HWND hWnd; //消息發(fā)送的窗口句柄;
UINT wFunc; //操作類型
LPCSTR pFrom; //源文件及路徑
LPCSTR pTo; //目標(biāo)文件及路徑
FILEOP_FLAGS fFlags; //操作與確認(rèn)標(biāo)志
BOOL fAnyOperationsAborted; //操作選擇位
LPVOID hNameMappings; //文件映射
LPCSTR lpszProgressTitle; //文件操作進(jìn)度窗口標(biāo)題
}SHFILEOPSTRUCT, FAR * LPSHFILEOPSTRUCT;

  在這個結(jié)構(gòu)中,hWnd是指向發(fā)送消息的窗口句柄,pFrom與pTo是進(jìn)行文件操作的源文件名和目標(biāo)文件名,它包含文件的路徑,對應(yīng)單個文件的路徑字符串,或?qū)τ诙鄠€文件,必須以NULL作為字符串的結(jié)尾或文件路徑名之間的間隔,否則在程序運(yùn)行的時候會發(fā)生錯誤。另外,pFrom和pTo都支持通配符*和?,這大大方便了開發(fā)人員的使用。例如,源文件或目錄有兩個,則應(yīng)是:char pFrom[]="d:\\Test1\0d:\\Text.txt\0",它表示對要D:盤Test目錄下的所有文件和D:盤上的Text.txt文件進(jìn)行操作。字符串中的"\\"是C語言中的'\'的轉(zhuǎn)義符,'\0'則是NULL。wFunc 是結(jié)構(gòu)中的一個非常重要的成員,它代表著函數(shù)將要進(jìn)行的操作類型,它的取值為如下:

  FO_COPY: 拷貝文件pFrom到pTo 的指定位置。

  FO_RENAME: 將pFrom的文件名更名為pTo的文件名。

  FO_MOVE: 將pFrom的文件移動到pTo的地方。

  FO_DELETE: 刪除pFrom指定的文件。

  使用該函數(shù)進(jìn)行文件拷貝、移動或刪除時,如果需要的時間很長,則程序會自動在進(jìn)行的過程中出現(xiàn)一個無模式的對話框(Windows操作系統(tǒng)提供的文件操作對話框),用來顯示執(zhí)行的進(jìn)度和執(zhí)行的時間,以及正在拷貝、移動或刪除的文件名,此時結(jié)構(gòu)中的成員lpszProgressTitle顯示此對話框的標(biāo)題。fFlags是在進(jìn)行文件操作時的過程和狀態(tài)控制標(biāo)識。它主要有如下一些標(biāo)識,也可以是其組合:

  FOF_FILESONLY:執(zhí)行通配符,只執(zhí)行文件;

  FOF_ALLOWUNDO:保存UNDO信息,以便在回收站中恢復(fù)文件;

  FOF_NOCONFIRMATION:在出現(xiàn)目標(biāo)文件已存在的時候,如果不設(shè)置此項,則它會出現(xiàn)確認(rèn)是否覆蓋的對話框,設(shè)置此項則自動確認(rèn),進(jìn)行覆蓋,不出現(xiàn)對話框。

  FOF_NOERRORUI:設(shè)置此項后,當(dāng)文件處理過程中出現(xiàn)錯誤時,不出現(xiàn)錯誤提示,否則會進(jìn)行錯誤提示。

  FOF_RENAMEONCOLLISION:當(dāng)已存在文件名時,對其進(jìn)行更換文提示。

  FOF_SILENT:不顯示進(jìn)度對話框。

  FOF_WANTMAPPINGHANDLE:要求SHFileOperation()函數(shù)返回正處于操作狀態(tài)的實際文件列表,文件列表名柄保存在hNameMappings成員中。

  SHFILEOPSTRUCT結(jié)構(gòu)還包含一個SHNAMEMAPPING結(jié)構(gòu)的數(shù)組,此數(shù)組保存由SHELL計算的每個處于操作狀態(tài)的文件的新舊路徑。

  在使用該函數(shù)刪除文件時必須設(shè)置SHFILEOPSTRUCT結(jié)構(gòu)中的神秘FOF_ALLOWUNDO標(biāo)志,這樣才能將待刪除的文件拷到Recycle Bin,從而使用戶可以撤銷刪除操作。需要注意的是,如果pFrom設(shè)置為某個文件名,用FO_DELETE標(biāo)志刪除這個文件并不會將它移到Recycle Bin,甚至設(shè)置FOF_ALLOWUNDO標(biāo)志也不行,在這里你必須使用全路徑名,這樣SHFileOperation才會將刪除的文件移到Recycle Bin。

轉(zhuǎn)自http://blog.csdn.net/jhb92/archive/2007/04/13/1563452.aspx

Shell的文件操作函數(shù)
SHFileOperation
功能:
1.復(fù)制一個或多個文件
2.刪除一個或多個
3.重命名文件
4.移動一個或多個文件

有一樣的Win32API功能函數(shù)是:
CopyFile(),DeleteFile(),MoveFile()
MoveFile可以對文件重命名!
Win32 API 的層次比SHFileOperation低

SHFileOperation
的重要參數(shù)
1.wFunc //對pFrom pTo要執(zhí)行的操作
2.fFlags //影響對wFunx的操作
3.hNameMappings   //有系統(tǒng)填充,和你也可以填充
4.lpszProgressTitle

pFrom pTo 在結(jié)尾是兩個'\0\0'
通常用一個'\0',這樣會失敗的!!
當(dāng)FOF_MULTIDESTFILES
szPFrom[lstrlen(szPFrom)+1]=0

szPFrom:必須先確定他所指定的文件存在!
可以是單個文件名,*.*,或包含統(tǒng)配符的文件名
注意必須是文件名,不是文件所在的文件夾名
szSource:可以是一個目錄,如果不是目錄,但又有
多個文件,那么必須和szPFrom的每一個文件對應(yīng),還要指定
FOF_MULTIDETFILES標(biāo)志


Source and Target
多個文件---> 一個文件夾
許多單獨的文件---->一個文件夾
單獨文件--->單獨文件
許多單獨的文件---->許多單獨的文件

單獨文件:知道名字的文件
多個文件:帶有統(tǒng)配符的文件
注意到source中沒有對文件夾的操作!!


!!!!
SHFileOperation能操作網(wǎng)絡(luò)上的文件
如果你想將本地文件復(fù)制到192.168.1.99
那么只要在192.168.1.99上共享123目錄
然后將pTo設(shè)置為\\192.168.1.99\123
就可以了
但不要設(shè)置為\\192.168.1.99


對hNameMappings操作是Undocumented!!
如果沒有指定hNameMappings
那么hNameMappings一直是NULL
只有當(dāng)某種操作(copy,move,rename)引起了文件名沖突了,hNameMappings才不是NULL!!!
當(dāng)?shù)谝淮蝐opy某些文件到空目錄中時hNameMappings一定是NULL
所以hNameMappings只是內(nèi)存中的一塊地區(qū)用來讓Explorer.exe保存被重命名的文件,以避免文件名沖突!
上面知道了如何才能使hNameMappings有效
現(xiàn)在如何使用hNameMappings,及其所指的結(jié)構(gòu)大小?并取得這個內(nèi)存塊的內(nèi)容呢?
hNameMappings 是簡單LPVOID無法使用loop
要使用hNameMappings,必須定義一個結(jié)構(gòu)體
struct HANDLETOMAPPINGS {
    UINT              uNumberOfMappings; // number of mappings in array
    LPSHNAMEMAPPING   lpSHNameMapping;    // pointer to array of mappings
};
但是可以寫一個Enumerate function to enumerate lpSHNameMapping指向的內(nèi)存塊,并且是讓W(xué)indow自己調(diào)用我的,不是我主動調(diào)用,象Loop

相關(guān)聯(lián)接:
Q154123:File Name Mapping with Windows NT 4.0 Shell
Q133326:SHFILEOPSTRUCT pFrom and pTo Fields Incorrect
Q142066:PRB: SHGetNameMappingPtr() and SHGetNameMappingCount()
Manipulating Files with the SHFileOperation Function in Visual Basic 4.0

 

FOF_SILENT //不產(chǎn)生正在復(fù)制的對話框
FOF_NOCONFIRMMKDIR//如果目的目錄不存在,就默認(rèn)創(chuàng)建
FOF_NOCONFIRMATION //不出現(xiàn)確認(rèn)文件替換對話框(Confirmation Dialog)(默認(rèn)替換原來的文i件)
FOF_NOERRORUI//不出現(xiàn)錯誤對話框
最好不要同時使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR
因為FOF_NOCONFIRMMKDIR屏蔽了missing directory Error
但FOF_NOERROR又屏蔽了missing directory Error,那么在同時使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR
時也阻止了新目錄安靜(沒有用戶確認(rèn)要產(chǎn)生新目錄的對話框)的產(chǎn)生!!
那么如何同時使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR?
就必須先確認(rèn)pTo所指定的目錄存在即可
BOOL MakeSureDiretoryPathExists(LPCSTR DirPath);

使用它要包含imagehlp.h和imagehlp.lib
如何判斷同時存在FOF_NOERRORUI,FOF_NOCONFIRMMKDIR


FOF_RENAMEONCOLLISION//有重復(fù)文件時自動重命名


能產(chǎn)生對話框的標(biāo)志:
FOF_SILENT             //progress dialog           
FOF_RENAMEONCOLLISION //replace dialog
FOF_NOCONFIRMATION     //confirmation dialog
FOF_NOCONFIRMMKDIR     //asks for your permission to create a new folder
FOF_NOERRORUI          //error message


FOF_ALLOWUNDO     //將文件放入回收站,否則直接刪除,一般這個最好做默認(rèn)

posted on 2010-08-16 10:31 wrh 閱讀(3157) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導(dǎo)航

<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

統(tǒng)計

常用鏈接

留言簿(19)

隨筆檔案

文章檔案

收藏夾

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品欧美日韩久久| 国产九九视频一区二区三区| 久久―日本道色综合久久| 欧美日韩一区二区精品| 在线观看精品| 久久久欧美精品sm网站| 亚洲影院一区| 国产精品家庭影院| 在线视频你懂得一区| 欧美大片在线观看一区二区| 久久精品亚洲一区| 韩国在线视频一区| 欧美一区视频在线| 亚洲欧美中文字幕| 韩国av一区| 麻豆国产精品777777在线| 久久久久久高潮国产精品视| 在线观看亚洲视频| 免费中文日韩| 欧美大片一区二区| 一本久道久久综合中文字幕| 欧美色图麻豆| 亚洲在线观看视频| 亚洲第一福利在线观看| 欧美在线播放一区二区| 国产日韩久久| 猛干欧美女孩| 欧美激情欧美狂野欧美精品| 一区二区国产在线观看| 一本色道久久综合亚洲精品高清 | 久久最新视频| 免播放器亚洲一区| 亚洲视频图片小说| 亚洲一区二区成人| 国内外成人在线视频| 亚洲第一在线视频| 国产精品ⅴa在线观看h| 久久激情网站| 欧美激情精品久久久久| 午夜欧美精品| 麻豆精品传媒视频| 亚洲图片激情小说| 久久成人在线| 一区二区三欧美| 欧美影院精品一区| 亚洲精品视频一区| 亚洲欧洲av一区二区| 亚洲激情综合| 亚洲欧美日韩精品久久亚洲区 | 欧美一区二区三区日韩| 91久久精品国产91性色| 一区二区三区高清| 永久91嫩草亚洲精品人人| 亚洲精品久久久久久久久久久久久 | 欧美激情第8页| 国产精品看片资源| 欧美激情视频在线播放| 国产精品中文字幕在线观看| 亚洲国产高清自拍| 国产一区二区三区在线观看免费视频 | 日韩亚洲视频| 激情欧美日韩| 亚洲午夜av电影| 亚洲精品国产精品国产自| 亚洲欧美日韩人成在线播放| 亚洲美女视频网| 久久久人人人| 久久av在线看| 国产精品第13页| 亚洲精品国产精品国自产在线| 黑人中文字幕一区二区三区| 亚洲天堂免费观看| 欧美体内she精视频在线观看| 亚洲国产成人久久| 亚洲自拍16p| 一本色道久久综合亚洲精品按摩 | 欧美伊人久久久久久久久影院| 在线视频日韩| 欧美精品一区二区在线播放| 欧美成人一区二区三区片免费| 国产伊人精品| 午夜亚洲视频| 午夜日本精品| 国产精品进线69影院| 99re66热这里只有精品4| 日韩亚洲国产精品| 欧美福利电影网| 亚洲经典在线| 夜夜精品视频| 欧美日韩一区不卡| 99国产精品久久久久久久| 日韩视频一区二区三区| 欧美高清视频| 亚洲精品免费观看| 亚洲系列中文字幕| 国产精品麻豆va在线播放| 亚洲视频在线观看免费| 亚洲主播在线观看| 国产精品美女www爽爽爽视频| 正在播放日韩| 欧美在线视频二区| 国内免费精品永久在线视频| 久久久久久香蕉网| 亚洲国产精品电影| 一本大道久久精品懂色aⅴ | 中文精品一区二区三区| 欧美色精品天天在线观看视频 | 欧美一区二区在线观看| 久久精品99国产精品酒店日本| 国产一区二区日韩| 另类亚洲自拍| 日韩亚洲不卡在线| 欧美在线|欧美| 亚洲第一区中文99精品| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲国产精品成人| 亚洲综合丁香| 国内精品**久久毛片app| 欧美96在线丨欧| 亚洲视频成人| 欧美成人性生活| 亚洲综合二区| 亚洲动漫精品| 国产精品豆花视频| 久久久久九九九九| 亚洲美女av网站| 久久久久久久久久久一区| 亚洲精品乱码久久久久久久久 | 欧美专区在线| 亚洲黄色在线看| 国产精品一区视频网站| 久久伊人亚洲| 亚洲视频综合在线| 欧美日韩午夜激情| 亚洲一区久久| 玖玖国产精品视频| 在线一区二区三区做爰视频网站| 国产精品一卡| 欧美人与性动交a欧美精品| 香港久久久电影| 日韩视频一区| 免费毛片一区二区三区久久久| 亚洲一区二区三区在线观看视频 | 欧美激情精品久久久久久黑人| 亚洲视频1区| 亚洲国产精选| 国产亚洲欧洲997久久综合| 欧美美女视频| 另类国产ts人妖高潮视频| 亚洲女人天堂成人av在线| 亚洲国产欧美不卡在线观看| 久久久青草青青国产亚洲免观| 亚洲男人第一网站| 亚洲精品影院| 亚洲国产欧美日韩另类综合| 国产一区二区视频在线观看| 国产精品成人一区二区艾草| 欧美成人综合网站| 久久免费高清| 久久久999国产| 亚洲欧美日韩精品久久亚洲区| 日韩视频三区| 亚洲精品日韩在线观看| 欧美福利影院| 欧美成人高清| 欧美成人精品| 欧美成人乱码一区二区三区| 久久中文在线| 免费观看成人| 欧美电影免费观看网站| 美女视频黄 久久| 久久九九热免费视频| 久久gogo国模裸体人体| 欧美有码在线视频| 久久成人精品一区二区三区| 欧美在线综合| 久久精品成人| 久久久久久91香蕉国产| 久久色在线播放| 理论片一区二区在线| 久久尤物视频| 欧美成人一区二区三区在线观看 | 99精品欧美一区二区三区综合在线 | 欧美国产日韩免费| 欧美精品三区| 欧美色欧美亚洲另类二区| 欧美日韩1区2区| 欧美性猛片xxxx免费看久爱| 欧美亚州一区二区三区 | 亚洲观看高清完整版在线观看| 在线观看视频一区| 亚洲精品一区二区三区四区高清| 亚洲精品资源| 亚洲一区二区黄色| 香蕉久久夜色| 久久综合成人精品亚洲另类欧美| 欧美大尺度在线观看| 亚洲肉体裸体xxxx137| 一道本一区二区| 欧美三级在线|