读书人

Win 八 文件读写操作

发布时间: 2012-09-01 09:33:03 作者: rapoo

Win 8 文件读写操作

啥也不说了,直接上代码。

#include <windows.h>#include <ppltasks.h>using namespace Platform;using namespace Windows::Storage;using namespace Windows::Storage::Streams;using namespace Concurrency;StorageFile^ openFile(String^ fileName){    StorageFile^ file = nullptr;    StorageFolder^ rootFolder = Windows::Storage::ApplicationData::Current->LocalFolder;    task<StorageFile^>(rootFolder->GetFileAsync(fileName)).then([&](task<StorageFile^> getFileTask)    {        try        {            file = getFileTask.get();        }        catch (Platform::Exception^ e)        {        }    }).wait();    return file;}Array<byte>^ getFileContent(String^ fileName){    Array<byte>^ data = nullptr;    StorageFile^ file = openFile(fileName);    if (file)    {        task<IRandomAccessStream^>(file->OpenAsync(FileAccessMode::Read)).then([&](task<IRandomAccessStream^> getStream)        {              auto readStream = getStream.get();            DataReader^ dataReader=ref new DataReader(readStream);            int length = readStream->Size;            if (length > 0)            {                data = ref new Array<byte>(length);                task<unsigned int>(dataReader->LoadAsync(readStream->Size)).then([&](task<unsigned int> loadTask) {                    loadTask.get();                    dataReader->ReadBytes(data);                }).wait();            }        }).wait();    }    return data;}bool setFileContent(String^ fileName, unsigned char* data, int size){    size_t totalWritten = 0;    bool complete = false;    StorageFile^ file = openFile(fileName);    if (file)    {        IRandomAccessStream^ readStream = nullptr;        task<IRandomAccessStream^>(file->OpenAsync(FileAccessMode::ReadWrite)).then([&](task<IRandomAccessStream^> getStream)        {              readStream = getStream.get();            DataWriter^ dataWriter = ref new DataWriter(readStream);            Array<unsigned char>^ arr = ref new Array<unsigned char>(data, size);            dataWriter->WriteBytes(arr);            task<unsigned int>(dataWriter->StoreAsync()).then([&](task<unsigned int> writeTask)            {                try                {                    totalWritten = writeTask.get();                } catch (Platform::Exception^ ex) {}            }).wait();            task<bool>(dataWriter->FlushAsync()).then([&](task<bool> flushTask)            {                try                {                    complete = flushTask.get();                } catch (Platform::Exception^ ex) {}            }).wait();            dataWriter->DetachStream();        }).wait();    }    return complete;}


读书人网 >编程

热点推荐