Я открыл файл используя 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, получить данные из таких операторов печати и записать их в файл как таковой?
Оператор >> доставит следующее «слово» в потоке в указанный вами строковый объект. Он разрывается на первом пустом месте, как вы нашли. Есть несколько способов добиться того, чего вы хотите. Наиболее соответствующим является открыть выходной файл как офстрим:
#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);
Если у вас нет веской причины использовать 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."