wofstream只创建一个空文件c ++

时间:2016-07-15 22:43:33

标签: c++ visual-studio uwp ofstream wofstream

我有一个for循环(下面),应该使用wofstream将几个字符串输出到多个文件。不幸的是,它会创建文件,但不会将字符串输出到文件中。文件始终为空。我看了很多类似的问题而没有运气。任何帮助将不胜感激。我在使用Visual Studio 2015的Windows 10计算机上编写UWP应用程序。

for (size_t k=0;k < vctSchedulesToReturn.size();k++)
{
    auto platformPath = Windows::Storage::ApplicationData::Current->RoamingFolder->Path;
    std::wstring wstrplatformPath = platformPath->Data();
    std::wstring wstrPlatformPathAndFilename = wstrplatformPath + L"\\" + availabilityData.month + L"_" + std::to_wstring(availabilityData.year) + L"_" + std::to_wstring(k) + L"_" + L"AlertScheduleOut.csv";
    std::string convertedPlatformPathandFilename(wstrPlatformPathAndFilename.begin(), wstrPlatformPathAndFilename.end());

    std::wofstream outFile(convertedPlatformPathandFilename);
    outFile.open(convertedPlatformPathandFilename);
    std::vector<std::pair<wstring, wstring>>::iterator pairItr;
    std::wstring strScheduleOutputString = L"";
    for (pairItr = vctSchedulesToReturn[k].second.begin(); pairItr!=vctSchedulesToReturn[k].second.end(); pairItr++)
    {
        strScheduleOutputString += pairItr->first + L",";
    }
    strScheduleOutputString += L"\r\n";
    for (pairItr = vctSchedulesToReturn[k].second.begin(); pairItr != vctSchedulesToReturn[k].second.end(); pairItr++)
    {
        strScheduleOutputString += pairItr->second + L",";
    }
    outFile << strScheduleOutputString;
    outFile.flush();
    outFile.close();
}

1 个答案:

答案 0 :(得分:3)

std::wofstream outFile(convertedPlatformPathandFilename);

这将创建一个新文件,并将其打开以进行书写。

outFile.open(convertedPlatformPathandFilename);

这会尝试打开第二次写入的相同文件流。由于文件流已打开,因此这是一个错误。该错误将流设置为失败状态,所有写入流的尝试现在都将失败。

这是你最终得到一个空输出文件的方法。它被创建,并且重复的第二次尝试打开相同的文件流对象会使其进入错误状态。