Как распечатать данные из stringstream в файл?

Я открыл файл используя CreateFile и попытался распечатать данные в файл. Поскольку данные включают в себя некоторые операторы печати, такие как

wprintf(L"Channel %s was not found.\n", pwsPath);

Декларация для DATA и pwsPath

#include <iostream>
#include <sstream>

using namespace std;
string data;
LPWSTR pwsPath = L"Channel1";

Я попытался использовать stringstream, чтобы получить данные и преобразовать их в LPCVOID, чтобы использовать WriteFile фн как показано

hFile1 = CreateFile(L"MyFile.txt",                // name of the write
GENERIC_WRITE,          // open for writing
0,                      // do not share
NULL,                   // default security
CREATE_ALWAYS,             // create new file only
FILE_ATTRIBUTE_NORMAL,  // normal file
NULL);

std::stringstream ss;
ss << "Channel" << pwsPath << "was not found.";

ss >> data;
cout << data; // data contains value only till the first space i.e Channel093902
cin>>data;bErrorFlag = WriteFile(
hFile1,           // open file handle
data.c_str(),      // start of data to write
dwBytesToWrite,  // number of bytes to write
&dwBytesWritten, // number of bytes that were written
NULL);

Это возможно для переменной данные включить пробелы из струнного потока ??
ИЛИ ЖЕ
Есть ли другой способ, кроме stringstream, получить данные из таких операторов печати и записать их в файл как таковой?

2

Решение

Оператор >> доставит следующее «слово» в потоке в указанный вами строковый объект. Он разрывается на первом пустом месте, как вы нашли. Есть несколько способов добиться того, чего вы хотите. Наиболее соответствующим является открыть выходной файл как офстрим:

#include <iostream>
#include <sstream>
#include <fstream>

using namespace std;int main()
{
std::string pwsPath { "[enter path here]" };
std::stringstream ss;
ss << "Channel " << pwsPath << " was not found.";

std::ofstream outFile("myFile.txt");
outFile << ss.rdbuf();
outFile.close();

std::ifstream inFile("myFile.txt");
cout << inFile.rdbuf();

return 0;
}

в противном случае вы можете получить внутреннюю строку из ostringstream:

std::string myData = ss.str();
size_t dataLength = myData.length();
DWORD dwBytesWritten = 0;
BOOL bErrorFlag = WriteFile(
hFile1,           // open file handle
myData.data(),      // start of data to write
DWORD(dataLength),  // number of bytes to write
&dwBytesWritten, // number of bytes that were written
NULL);
1

Другие решения

Если у вас нет веской причины использовать CreateFile и WriteFile, рассмотрите возможность использования объектов std полностью.

Ваш код может выглядеть так:

#include <iostream>
#include <fstream> // add this

#include <sstream> // remove this unless used elsewhere

// your pwsPath
std::wstring path{ L"Channel1" };

std::wofstream out{ L"MyFile.txt", std::wofstream::trunc };

// skip the stringstream completely
out << "Channel " << path << " was not found."
2

По вопросам рекламы [email protected]