Metro style app 文件、文件夹的选择、文件的保存。
1、选择单个文件
public
async
void
PickAFile()
{
FileOpenPicker openPicker =
new
FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(
".jpg"
);
openPicker.FileTypeFilter.Add(
".jpeg"
);
openPicker.FileTypeFilter.Add(
".png"
);
StorageFile file = await openPicker.PickSingleFileAsync();
if
(file !=
null
)
{
// Application now has read/write access to the picked file
msg =
"Picked photo: "
+ file.Name;
}
else
{
msg =
"Operation cancelled."
;
}
}
|
2、选择多个文件
public
async
void
PickFiles()
{
FileOpenPicker openPicker =
new
FileOpenPicker();
openPicker.ViewMode = PickerViewMode.List;
openPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
openPicker.FileTypeFilter.Add(
"*"
);
IReadOnlyList<StorageFile> files = await openPicker.PickMultipleFilesAsync();
if
(files.Count > 0)
{
StringBuilder output =
new
StringBuilder(
"Picked files:\n"
);
// Application now has read/write access to the picked file(s)
foreach
(StorageFile file
in
files)
{
output.Append(file.Name +
"\n"
);
}
msg = output.ToString();
}
}
|
3、选择文件夹
public
async
void
PickFolder()
{
FolderPicker folderPicker =
new
FolderPicker();
folderPicker.SuggestedStartLocation = PickerLocationId.Desktop;
folderPicker.FileTypeFilter.Add(
".docx"
);
folderPicker.FileTypeFilter.Add(
".xlsx"
);
folderPicker.FileTypeFilter.Add(
".pptx"
);
folderPicker.FileTypeFilter.Add(
".jpg"
);
folderPicker.FileTypeFilter.Add(
".jpeg"
);
StorageFolder folder = await folderPicker.PickSingleFolderAsync();
if
(folder !=
null
)
{
// Application now has read/write access to all contents in the picked folder (including other sub-folder contents)
StorageApplicationPermissions.FutureAccessList.AddOrReplace(
"PickedFolderToken"
, folder);
msg =
"Picked folder: "
+ folder.Name;
}
else
{
msg =
"Operation cancelled."
;
}
}
|
4、保存文件
public
async
void
SaveFile()
{
FileSavePicker savePicker =
new
FileSavePicker();
savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
// Dropdown of file types the user can save the file as
savePicker.FileTypeChoices.Add(
"Plain Text"
,
new
List<
string
>() {
".txt"
});
// Default file name if the user does not type one in or select a file to replace
savePicker.SuggestedFileName =
"New Document"
;
StorageFile file = await savePicker.PickSaveFileAsync();
if
(file !=
null
)
{
// Prevent updates to the remote version of the file until we finish making changes and call CompleteUpdatesAsync.
CachedFileManager.DeferUpdates(file);
// write to file
await FileIO.WriteTextAsync(file, file.Name);
// Let Windows know that we're finished changing the file so the other app can update the remote version of the file.
// Completing updates may require Windows to ask for user input.
FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file);
if
(status == FileUpdateStatus.Complete)
{
msg =
"File "
+ file.Name +
" was saved."
;
}
else
{
msg =
"File "
+ file.Name +
" couldn't be saved."
;
}
}
}
|
下面是C++版本
1、选择单个文件
void
BasicHandleCPP::MainPage::PickerAFile_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
FileOpenPicker^ openPicker =
ref
new
FileOpenPicker();
openPicker->ViewMode = PickerViewMode::Thumbnail;
openPicker->SuggestedStartLocation = PickerLocationId::PicturesLibrary;
openPicker->FileTypeFilter->Append(
".jpg"
);
openPicker->FileTypeFilter->Append(
".jpeg"
);
openPicker->FileTypeFilter->Append(
".png"
);
create_task(openPicker->PickSingleFileAsync()).then([
this
](StorageFile^ file)
{
if
(file)
{
Display->Text =
"Picked photo: "
+ file->Name;
}
else
{
Display->Text =
"Operation cancelled."
;
}
});
}
|
2、选择多个文件
void
BasicHandleCPP::MainPage::PickerFiles_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
FileOpenPicker^ openPicker =
ref
new
FileOpenPicker();
openPicker->ViewMode = PickerViewMode::List;
openPicker->SuggestedStartLocation = PickerLocationId::DocumentsLibrary;
openPicker->FileTypeFilter->Append(
"*"
);
create_task(openPicker->PickMultipleFilesAsync()).then([
this
](IVectorView<StorageFile^>^ files)
{
if
(files->Size > 0)
{
String^ output =
"Picked files:\n"
;
std::for_each(begin(files), end(files), [
this
, &output](StorageFile ^file)
{
output += file->Name +
"\n"
;
});
Display->Text = output;
}
else
{
Display->Text =
"Operation cancelled."
;
}
});
}
|
3、选择文件夹
void
BasicHandleCPP::MainPage::PickerFolder_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
FolderPicker^ folderPicker =
ref
new
FolderPicker();
folderPicker->SuggestedStartLocation = PickerLocationId::Desktop;
// Users expect to have a filtered view of their folders depending on the scenario.
// For example, when choosing a documents folder, restrict the filetypes to documents for your application.
folderPicker->FileTypeFilter->Append(
".docx"
);
folderPicker->FileTypeFilter->Append(
".xlsx"
);
folderPicker->FileTypeFilter->Append(
".pptx"
);
create_task(folderPicker->PickSingleFolderAsync()).then([
this
](StorageFolder^ folder)
{
if
(folder)
{
Display->Text =
"Picked folder: "
+ folder->Name;
}
else
{
Display->Text =
"Operation cancelled."
;
}
});
}
|
4、保存文件
void
BasicHandleCPP::MainPage::SaveFile_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
FileSavePicker^ savePicker =
ref
new
FileSavePicker();
savePicker->SuggestedStartLocation = PickerLocationId::DocumentsLibrary;
auto plainTextExtensions =
ref
new
Platform::Collections::Vector<String^>();
plainTextExtensions->Append(
".txt"
);
savePicker->FileTypeChoices->Insert(
"Plain Text"
, plainTextExtensions);
savePicker->SuggestedFileName =
"New Document"
;
create_task(savePicker->PickSaveFileAsync()).then([
this
](StorageFile^ file)
{
if
(file != nullptr)
{
// Prevent updates to the remote version of the file until we finish making changes and call CompleteUpdatesAsync.
CachedFileManager::DeferUpdates(file);
// write to file
create_task(FileIO::WriteTextAsync(file, file->Name)).then([
this
, file]()
{
// Let Windows know that we're finished changing the file so the other app can update the remote version of the file.
// Completing updates may require Windows to ask for user input.
create_task(CachedFileManager::CompleteUpdatesAsync(file)).then([
this
, file](FileUpdateStatus status)
{
if
(status == FileUpdateStatus::Complete)
{
Display->Text =
"File "
+ file->Name +
" was saved."
;
}
else
{
Display->Text =
"File "
+ file->Name +
" couldn't be saved."
;
}
});
});
}
else
{
Display->Text =
"Operation cancelled."
;
}
});
}
|
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2012/06/28/2567009.html,如需转载请自行联系原作者