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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值