从流中读取并将其写回文件时接收垃圾字符

时间:2014-01-12 10:20:01

标签: c++ windows file-io fstream corruption

我一直在搞乱原始图像标题,比如位图标题,图标标题等,只是为了看看如何使用它来包装自定义数据,但我有一个问题,如果我从流中读取向量包含与存储在磁盘上的文件一样多的字节,但当我将其内容写入文件时(即使没有ppm标头)它包含垃圾字符,它比原始文件长约150个字节:L这让我觉得输入流附加垃圾字符。

这是我的代码,StreamReadFile和GetFilesize只是我需要的一些功能,因为我在我的项目中有很多读写文件^^

vector<char> StreamReadFile(LPWSTR path, long FileSize, int pos) {

     ifstream InputStream(path, ios::in | ios::binary);
     vector<char> buffer(FileSize);

     long ticks = 0;

     if(pos > 0) {
         InputStream.seekg(pos);
     }

     while(FileSize > ticks) {
         buffer[ticks] = InputStream.get();
         ticks++;
     }
     return buffer;
}

long GetFileSize(LPWSTR path) {

     ifstream stream(path, ios_base::in | ios_base::binary);

     if(stream.is_open()) {
         stream.seekg(0, ios_base::end);
         return (long) stream.tellg();
     }

     return -1;
}

int CreatePPM(vector<char> image) {
     #pragma pack(push, 1)

     PPMFILEHEADER ppm;
     ppm.width = image.size() / 2;
     ppm.height = image.size() / 2;
     ppm.size = image.size();
     ppm.data = image.data();

     vector<char> input = StreamReadFile(L"MessageBox.exe", GetFileSize(L"MessageBox.exe"), 0);

     ofstream filestream("drop.ppm");
     filestream.write(input.data(), input.size());
     filestream.close();

     #pragma pack(pop)

     return 0;
}

任何帮助都将非常感谢^^

最好的问候Paze。

0 个答案:

没有答案