【问题标题】:C++ write part of *char buffer to temp file on WindowsC++ 将 *char 缓冲区的一部分写入 Windows 上的临时文件
【发布时间】:2012-05-08 21:52:44
【问题描述】:

我对 C++ 和 win32 还是很陌生。我需要完成一个非常简单的任务:

  1. 我有一个缓冲区 char* 缓冲区,我知道它的长度并保存一些二进制数据。您能否提供一个示例代码,将缓冲区的内容(给定起始索引和长度)写入 Windows(win32 api)上的临时文件(即使没有管理员权限,位置也必须是可写的)?所以,要做到这一点,我必须知道如何在我可以写入的窗口上获取一个有效的临时文件名,以及我应该如何从我的 char* 缓冲区的给定部分向该文件写入一些二进制数据。

  2. 此外,我似乎无法确定是否可以将 char 用于二进制文件,但问题是 ifstream 默认情况下会将数据读取为 char。

  3. 还有一个小问题:我是否总是必须在完成所有指针后删除它们。 IE。在我上面的示例中,我是否必须在完成后调用 delete buffer?

谢谢。

【问题讨论】:

  • 你试过什么?你有什么具体问题? StackOverflow 不是一个教程网站。 (虽然 #2 和 #3 很容易回答:是和是)
  • 你问不同的事情,我想,在第一个问题中你解决了 windows api,在第二个问题中你谈到了 ifstream 问题。您需要什么 API?

标签: c++ winapi io


【解决方案1】:

我有一个缓冲区 char* 缓冲区,我知道它的长度并保存一些二进制数据。您能否提供一个示例代码来编写 该缓冲区的内容(给定起始索引和长度)到 临时文件(即使没有管理员权限,位置也必须是可写的) 在 Windows 上(win32 api)?

在 google 中快速搜索会返回制造商关于临时文件的文档。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363875(v=vs.85).aspx

请记住,一旦您以这种方式使用临时文件,您的代码将自动不可移植(以防这对您很重要)。

一旦您有了临时文件的名称和目录,您所要求的代码就很简单了。再次,在 google 中快速搜索返回:

http://www.cplusplus.com/forum/general/21018/

如果您更喜欢坚持 C(旧)风格而不是使用 IOStream,您也可以使用:

http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/

还有一个简单的附带问题:一旦我完成了指针,我是否总是需要删除它们。 IE。在我上面的例子中,我会 完成后必须调用删除缓冲区吗?

在使用它之后,您必须始终删除由指针(这是其名称的由来)指向的已分配内存。

char * buffer = new char[MaxBuffer];

// more things ...

delete[] buffer;

记得在删除向量而不是单个对象时使用delete[]

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 2018-12-31
    • 2017-01-05
    • 1970-01-01
    相关资源
    最近更新 更多