如何复制和粘贴文件 (HTML)
12/11/2015
本文内容
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
剪贴板允许用户在同一应用中或者在同一计算机上的两个不同的应用之间复制和粘贴文件。本主题介绍如何在你的应用中支持复制和粘贴文件。
查看我们的剪贴板示例应用以便获得介绍如何复制和粘贴其他类型数据的完整示例。
你需要了解的内容
技术
先决条件
你应当熟悉 Visual Studio 及其关联模板。
你应当熟悉 JavaScript。
将文件复制到剪贴板
检索用户要复制的文件。以下示例使用文件选取器检索文件。若要了解有关文件选取器的详细信息,请参阅快速入门:使用文件选取器访问文件。若要了解有关访问文件的其他方法的详细信息,请参阅访问数据和文件。
var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.fileTypeFilter.replaceAll(["*"]);
picker.viewMode = Windows.Storage.Pickers.PickerViewMode.list;
picker.pickMultipleFilesAsync().done(function (files) {
...
}
创建 DataPackage 对象并向该对象中添加文件。
var dataPackage = new Windows.ApplicationModel.DataTransfer.DataPackage();
dataPackage.setStorageItems(files);
从支持文件操作的目标(文件资源管理器)请求复制操作。
dataPackage.requestedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.copy;
将 DataPackage 的内容复制到剪贴板。
Windows.ApplicationModel.DataTransfer.Clipboard.setContent(dataPackage);
粘贴剪贴板中的文件
获取剪贴板的内容。
var dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.getContent();
检查剪贴板是否包含任何存储项目(文件和文件夹),如果包含,则检索这些项目。
if (dataPackageView.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.storageItems)) {
dataPackageView.getStorageItemsAsync().done(function (storageItems) {
...
}
...
}
按照用户的指示检索任何文件并复制这些文件。以下示例将文件复制到应用的本地文件夹。
// Copy files to the local folder.
storageItems.forEach(function (file) {
if (file.isOfType(Windows.Storage.StorageItemTypes.file)) {
file.copyAsync(Windows.Storage.ApplicationData.current.localFolder,
file.name, Windows.Storage.NameCollisionOption.replaceExisting).done(function (newFile) {
document.getElementById("fileOutput").innerHTML += file.name + "";
}, function (e) {
displayError("Error copying file: " + e);
});
} else {
// It's a folder. We're skipping folders to keep the sample brief.
document.getElementById("fileOutput").innerHTML += file.path + " is a folder, skipping ";
}
});
完整示例
该示例显示如何复制用户通过文件选取器选择的文件。
function copyFiles() {
var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.fileTypeFilter.replaceAll(["*"]);
picker.viewMode = Windows.Storage.Pickers.PickerViewMode.list;
picker.pickMultipleFilesAsync().done(function (files) {
if (files.size > 0) {
var dataPackage = new Windows.ApplicationModel.DataTransfer.DataPackage();
dataPackage.setStorageItems(files);
// Request a copy operation from targets that support different file operations, like Windows Explorer
dataPackage.requestedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.copy;
try {
// Copy the content to the Clipboard.
Windows.ApplicationModel.DataTransfer.Clipboard.setContent(dataPackage);
displayStatus("Files have been copied to Clipboard. Try pasting them in another application, or click Paste button above.");
} catch (e) {
// Copying data to Clipboard can fail if, for example, another app is holding
// the Clipboard open.
displayError("Error copying content to Clipboard: " + e + ". Try again.");
}
} else {
displayStatus("No file selected");
}
});
}
以下示例检索剪贴板中的文件并将这些文件存储在应用的本地文件夹中。
function pasteFiles() {
// Get the content from the Clipboard.
var dataPackageView = Windows.ApplicationModel.DataTransfer.Clipboard.getContent();
// Check whether the content contains any storage items.
if (dataPackageView.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.storageItems)) {
dataPackageView.getStorageItemsAsync().done(function (storageItems) {
// Copy files to the local folder.
storageItems.forEach(function (file) {
if (file.isOfType(Windows.Storage.StorageItemTypes.file)) {
file.copyAsync(Windows.Storage.ApplicationData.current.localFolder,
file.name, Windows.Storage.NameCollisionOption.replaceExisting).done(function (newFile) {
document.getElementById("fileOutput").innerHTML += file.name + "";
}, function (e) {
displayError("Error copying file: " + e);
});
} else {
// It's a folder. We're skipping folders to keep the sample brief.
document.getElementById("fileOutput").innerHTML += file.path + " is a folder, skipping ";
}
});
}, function (e) {
displayError("Error retrieving files from Clipboard: " + e);
});
} else {
displayStatus("No files on Clipboard");
}
}
相关主题