- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 TMemoryStream 缓冲区的内容复制到 void 指针,下面您可以看到不起作用的示例代码 - void 缓冲区为空,但文本框包含有效大小 - 我用 winrar 大小检查了它。以下代码创建 exe 文件,但它的大小为 0。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMemoryStream* ms = new TMemoryStream();
Download->Get("http://rarlab.com/rar/wrar521pl.exe",ms);
this->Edit1->Text = ms->Size;
void* buffer = malloc(ms->Size );
ms->Read(buffer,ms->Size);
FILE* pFile = fopen("test.exe","wb");
fwrite(buffer,4,ms->Size,pFile);
fclose(pFile);
delete ms;
}
此外,我知道我可以轻松地将 TMemoryStream 缓冲区的内容保存到文件中,但我需要它的内容作为 void 指针,所以我编写了以下代码来测试它。
最佳答案
您从流中读取的代码几乎是正确的。您没有在读取之前将流的 Position
属性重置为 0,因此您实际上是从流的末尾开始读取,那里没有要读取的数据。
试试这个:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMemoryStream* ms = new TMemoryStream();
try
{
Download->Get("http://rarlab.com/rar/wrar521pl.exe", ms);
ms->Position = 0; // <-- ADD THIS
Edit1->Text = ms->Size;
void* buffer = malloc(ms->Size);
if (buffer)
{
ms->ReadBuffer(buffer, ms->Size);
// ms->SaveToFile("test.exe");
FILE* pFile = fopen("test.exe", "wb");
if (pFile)
{
fwrite(buffer, 1, ms->Size, pFile);
fclose(pFile);
}
free(buffer);
}
}
__finally
{
delete ms;
}
}
或者,根本不分配单独的缓冲区,而是直接使用流自己的缓冲区:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMemoryStream* ms = new TMemoryStream();
try
{
Download->Get("http://rarlab.com/rar/wrar521pl.exe", ms);
Edit1->Text = ms->Size;
void* buffer = ms->Memory;
// ms->SaveToFile("test.exe");
FILE* pFile = fopen("test.exe", "wb");
if (pFile)
{
fwrite(buffer, 1, ms->Size, pFile);
fclose(pFile);
}
}
__finally
{
delete ms;
}
}
关于C++ Builder 将 TMemoryStream 缓冲区读取为无效指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32102456/
我在这里阅读了很多关于将字符串写入 TMemoryStream 并保存到文件并将字符串读回 TMemoryStream 的讨论 我不知道我在这里做错了什么,但我的 SaveData 或 LoadDat
我尝试将加载到Memorystream中的前16个字节读取为TBytes。此ReadBuffer methot引发访问冲突异常。 我想从文件中加载加密的数据。前16个字节是用于创建文件的密码的MD5哈
我想做的就是使用 TSockets 发送一个流,但遇到“内存不足”错误。我成功发送了文件,但没有发送图像。在服务器表单的 OnCreate 事件中,我正在创建流。对于客户端,在表单的 OnCreate
如何将 TMemoryStream 的内容转换为变体?我使用Delphi 2010。 TMemoryStream存储文件的内容,可以是PDF或JPG(扫描文档)。 文件保存在 MS SQL 库中。当我
我正在使用 D6 Professional,需要从内存中已有的大量小字符串创建特定格式的文本文件。出于性能考虑,我正在考虑使用 TMemoryStream 来整理文件数据,然后通过 TFileStre
我正在delphi(RAD Studio)创建一个项目。数据库表中的某些行存储有图像。我想在运行时提取图像(为此我使用 TMemoryStream 数组)并在 frxReport 中显示它们。 我的代
这是我关于 SO 的第二个问题,我希望我的格式正确。 我在工作中发现 TFileStream 比 TMemoryStream 慢,我真的不知道为什么会这样。因此我决定做一些测试。 在我发现这种行为的应
以下函数采用 Richedit 中的选定文本控制,写入 TMemoryStream在回调函数内,然后以纯文本字符串形式返回原始 rtf 代码。 var MS: TMemoryStream; //
我有一些 Delphi 代码需要转换为 Qt/C++。 整体代码读取二进制数据文件,并提取部分数据。 Delphi代码读取文件内容如下: var m1 tmemorystream; h1
我正在尝试将 TMemoryStream 缓冲区的内容复制到 void 指针,下面您可以看到不起作用的示例代码 - void 缓冲区为空,但文本框包含有效大小 - 我用 winrar 大小检查了它。以
我正在尝试使用这样的简单代码行读取 bool 值:ReadBuffer(Result, 1)。 阅读后,结果为真。然而 Result:= not Result 不会“切换”值 false。 我在这里显
如何使用 TComInterface 对象并将其读入 TMemoryStream?我可以采用 TComInterface 并将其用作 TStream* 以某种方式使用 TMemoryStream Lo
如何通过datasnap与TMemoryStream传输TObject? TMyObject = class(TBizObject) FText: TMemoryStream; bytes t
我正在编写并行代码来枚举大量 CSV 文件,每个文件都包含历史股票数据(超过 6500 个代码),并计算每只股票是否已达到历史最高点。 我已经实现了一个线程池和 TThread 后代类,以在线程之间平
我在 XE2 中找到了 Remy Lebeau 的 IdTCP 组件的聊天演示,我想玩一下。 (可以找到 here )我想使用这些组件发送图片,最好的方法似乎是使用 TMemoryStream。如果我
我需要对 TTreeView 的树的 Unicode 字符串做一些事情,所以我想将此字符串加载到内存流中,然后将内存流加载到 TreeView 中。我怎样才能做到这一点? 最佳答案 您很想直接使用 T
在 Delphi 2009 之前我们有以下代码: function MemoryStreamToString(M : TMemoryStream): String; var NewCapaci
我有一个方法可以读取TStringGrid行的单元格中的数据,并将其复制到剪贴板。我有一个相应的方法将剪贴板中的数据粘贴到 TStringGrid 中的空行中。 这些方法是为 D7 编写的,但在迁移到
使用 Delphi Tokyo 10.2.3 并针对 Android,我正在创建多个线程来下载 PNG 图像并在后台对其进行解码。 由于这里解释的稳定性原因,使用 TBitmap 不是一个选项: Ge
我找到了遗留源代码和这里的摘录 - TMemoryStream *DFile = new TMemoryStream; TFileStream*BFile = new TFileStream; 以下是
我是一名优秀的程序员,十分优秀!