2016-07-15 11 views
1

У меня есть цикл for (ниже), который должен выводить несколько строк нескольким файлам с использованием wofstream. К сожалению, он создает файл, но не выводит строку в файл. Файлы всегда пусты. Я просмотрел множество подобных вопросов без везения. Любая помощь будет принята с благодарностью. Я на компьютере с Windows 10, используя Visual Studio 2015, чтобы написать приложение UWP.wofstream создает пустой файл C++

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(); 
} 
+2

Вы пробовали 'outFile <<" Hello World ";' просто проверить, что происходит? – tony

+1

Кроме того: почему вы строите строку и записываете строку в 'outFile', а не просто записываете в' outFile'? – Hurkyl

+0

Кроме того, каким образом вы определяете, что файл пуст? Я видел, что это делалось неправильно несколько раз. – Hurkyl

ответ

3
std::wofstream outFile(convertedPlatformPathandFilename); 

Это создает новый файл и открывает его для записи.

outFile.open(convertedPlatformPathandFilename); 

Это попытка открыть тот же файловый поток для записи во второй раз. Поскольку поток файлов уже открыт, это ошибка. Ошибка устанавливает поток в состояние сбоя, и все попытки записи в поток теперь терпят неудачу.

Так вы получите пустой выходной файл. Он создается, а дубликат, вторая попытка открыть тот же объект потока файлов, помещает его в состояние ошибки.

+0

Вот и все. Ты просто избавил меня от разочарования. Спасибо огромное! – ViperJuice

+0

@ user2757835: Это одна из веских причин, почему вы должны добавлять код проверки ошибок при выполнении операций ввода-вывода! – Hurkyl

+0

Hurkyl, Спасибо за совет. Как вы, вероятно, можете сказать, я довольно новичок в любой существенной разработке программного обеспечения. Я ценю руководство. Я добавлю некоторые проверки ошибок. – ViperJuice

 Смежные вопросы

  • Нет связанных вопросов^_^