我想用IFileOperation CopyItem
複製文件從一個目錄到另一個目錄 是有一個簡單的例子,在Delphi 7中使用IFileOperation?在Delphi 7
回答
在我原來的答覆的時間,在
TFileOperation CopyItem Delphi search先打是
nice blog post由布魯諾·馬丁斯Stuani使用
IFileOperation及其
CopyItem方法。
該帖子包含Delphi示例代碼。
編輯: 與從2010年的Delphi,所述IFileOperation
接口在ShlObj
單元定義。
這取決於在該單元不少其他東西,所以它不是一個快速的「複製粘貼」在這裏(除了一個事實,即單位受版權保護)。
--jeroen
博客文章是關於截取fileoperations,但沒有解釋如何使用IFileOperation.CopyItem? – 2010-07-14 12:35:49
實際上,您的Google搜索中的第一次點擊指向此頁面,其中有跳轉到另一個頁面的第一個鏈接的指令,該頁面指向跳轉到ano第一個鏈接的頁面。[STACKOVERFLOW] – 2010-07-14 12:36:51
@Wouter:由於Delphi 7不包含IFileOperation的翻譯,因此我將'use'理解爲'具有IFileOperation接口的Delphi翻譯。布魯諾提供了這一點。 @The_Fox:在我寫作的時候它是; StackOverflow有很棒的搜索引擎優化,所以通常它很快會在谷歌搜索結束。這就是爲什麼我發佈了Bruno發佈的鏈接。我很高興你提供了一個更廣泛的答案,並給你一個upvote。 - jeroen – 2010-07-14 12:46:35
我發現MSDN documentation和它包括一個例子。下面是翻譯成德爾福的例子:
uses ActiveX, ComObj, ShlObj;
function TForm1.CopyItem(const aSrcItem, aDest, aNewName: string): HRESULT;
const
CLSID_FileOp: TGUID = '{3ad05575-8857-4850-9277-11b85bdb8e09}';
var
lFileOperation: IFileOperation;
psiFrom: IShellItem;
psiTo: IShellItem;
begin
//
// Initialize COM as STA.
//
Result := CoInitializeEx(nil, COINIT_APARTMENTTHREADED or COINIT_DISABLE_OLE1DDE);
if Succeeded(Result) then
begin
//
// Create the IFileOperation interface
//
Result := CoCreateInstance(CLSID_FileOp, nil, CLSCTX_ALL, IFileOperation,
lFileOperation);
if Succeeded(Result) then
begin
//
// Set the operation flags. Turn off all UI from being shown to the
// user during the operation. This includes error, confirmation,
// and progress dialogs.
//
Result := lFileOperation.SetOperationFlags(FOF_NO_UI);
if Succeeded(Result) then
begin
//
// Create an IShellItem from the supplied source path.
//
Result := SHCreateItemFromParsingName(aSrcItem,
nil,
IShellItem, psiFrom);
if Succeeded(Result) then
begin
if aDest <> '' then
begin
//
// Create an IShellItem from the supplied
// destination path.
//
Result := SHCreateItemFromParsingName(aDest,
nil,
IShellItem, psiTo);
end;
if Succeeded(Result) then
begin
//
// Add the operation
//
Result := lFileOperation.CopyItem(psiFrom, psiTo, aNewName, nil);
psiTo := nil;
end;
psiFrom := nil;
end;
if Succeeded(Result) then
begin
//
// Perform the operation to copy the file.
//
Result := lFileOperation.PerformOperations;
end;
end;
//
// Release the IFileOperation interface.
//
lFileOperation := nil;
end;
CoUninitialize;
end;
end;
免責聲明: IFileOperation.CopyItem可從Windows Vista和更高。所以上面的例子只適用於Delphi 2010(和2009?)。由於我使用的是Delphi 7,因此我無法編譯它,因爲我缺少ShlObj單元的最新版本。從Delphi使用COM很容易,因此轉換示例並不是什麼大問題。我搜索了IFileOperation的CLSID,所以我不知道它是否是正確的。
如果你真的希望這用Delphi 7工作,你必須有IFileOperation的定義。 Jeroen提供的鏈接具有IShellItem的定義,但不適用於IFileOperation。如果你知道某人有一個Delphi 2010的版本,你可以問他ShlObj.pas(但它是有版權的,所以你必須Shobjidl.h自己翻譯或等待別人去做,你可以檢查的項目JEDI)。
當這一切似乎很複雜,嘗試Windows API調用,CopyFile
。
這是一個很好的翻譯,但你不需要刪除接口。接口引用被重新計數,Delphi編譯器將在函數結束時超出範圍時自動釋放它們。 – 2010-07-14 18:57:44
@Mason Wheeler:我知道,但我只是翻譯了MSDN的例子。因此,在MSDN示例稱爲發佈的地方,我剔除了它們。只是爲了展示你如何在Delphi中做到這一點,雖然它是多餘的。 – 2010-07-15 06:41:13
- 1. 不能在Delphi 7
- 2. 用Delphi 7
- 3. Delphi 7的PngComponents
- 4. utf8decode in delphi 7
- 5. Delphi 7上的Quicktime 7
- 6. Delphi 7 ODBC MySQL Win 7
- 7. 的ClassInfo功能在Delphi 7
- 8. GetExtendedUdpTable未在Delphi工作7
- 9. 在delphi 7中清除timage.canvas
- 10. 在Delphi 7中繞過OutputDebugString?
- 11. DateTimePicker在Delphi 7中對齊
- 12. Delphi 7和oracle(oraoledb)
- 13. Indy 10 for Delphi 7
- 14. Delphi 7 - TDBGrid風格
- 15. Delphi 7 Indy 10 ioHandler
- 16. Delphi 7爲我的程序在線生成密鑰(delphi 7許可)
- 17. 更新Delphi 7應用程序在Delphi 2010上運行
- 18. 如何在Delphi 7中使用delphi製作com界面
- 19. 如何在Delphi 2010中查找IdMappedPortTCP Delphi 7
- 20. 「特定於平臺」在Delphi 7上的Delphi 6警告
- 21. 翻譯常量delphi 7 gnugettext
- 22. Delphi 7 MySQL5.7 mysql.pas libmysql.dll UTF8
- 23. Windows 8上的Delphi 7
- 24. Delphi 7 - 如何使用Inputbox
- 25. Delphi 7箇中TGUID比較
- 26. Windows 7與Delphi的集成
- 27. Delphi 7中的EFilererror異常
- 28. Delphi 7 IDE的寫腳本
- 29. Delphi 7中的病毒
- 30. SQL中的參數 - Delphi 7
你知道這是隻打算從Vista和更高的工作嗎?所以沒有XP或Server 2003和更低? – 2010-07-14 11:57:07
如果您有新問題,請不要編輯這個問題。你所做的改變沒有任何意義,它使給定的答案無效。 – Will 2010-07-19 12:23:29