您好,我在使用 C++ 重写文件时遇到了一些问题。我尝试从一个二进制文件中读取数据并将其写入另一个。
{
// Reading size of file
FILE * file = fopen("input.txt", "r+");
if (file == NULL) return;
fseek(file, 0, SEEK_END);
long int size = ftell(file);
fclose(file);
// Reading data to array of unsigned chars
file = fopen("input.txt", "r+");
unsigned char * in = (unsigned char *) malloc(size);
for (int i = 0; i < size; i++)
in[i] = fgetc(file);
fclose(file);
file = fopen("output.txt", "w+");
for (int i = 0; i < size; i++)
fputc((int)in[i], file);
fclose(file);
free(in); …Run Code Online (Sandbox Code Playgroud) 我想从 Spring 服务下载带有 angularjs (1.0.8) 的文件。我使用 POST 请求是因为我必须传递一段 HTML 作为参数,并且浏览器对查询字符串的长度有限制。这是我的代码:
$http({
method: 'POST',
url: '/export/pdf',
data: "html=" + graphHtml.outerHTML,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
transformResponse: function(data, headersGetter){
return data;
}
}).success(function(data) {
console.log("Type '" + typeof(data) + "'");
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:application/pdf,' + data;
hiddenElement.target = '_blank';
hiddenElement.download = 'myFile.pdf';
hiddenElement.click();
});
Run Code Online (Sandbox Code Playgroud)
我注意到收到的“数据”已经是“字符串”格式了!我看到很多(?)问题点,当输入
typeof(data)
Run Code Online (Sandbox Code Playgroud)
我收到“字符串”。我不希望对我的原始数据进行这种解释。当我尝试在文件中写入数据时,大小是原始文件的两倍!我知道它是用于二进制数据的“字符串解释”,而不是希望读取为二进制数据。有没有人有解决方案以原始格式而不是字符串形式查看“数据”?
我想按字节将文件读入数组,然后将数组的数据反转写入新文件中(程序通过命令行参数获取文件名)。用 txt 文件尝试过,它有效,但如果我在 jpg 文件上尝试,新文件比原始文件大!确定的文件大小以long size保存;对于 jpg 文件来说也是正确的,并且写入循环获取大小时间执行写入一个字符(字符是一个字节大,我是对的?)。有谁知道输出文件如何变得大于 size*byte?
对我来说这似乎不符合逻辑!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char* argv[])
{
FILE *file;
char *buffer;
long size;
char filename[32];
if(argc>1)
{
//determine file size
file=fopen(argv[1],"r");
fseek(file,0,SEEK_END);
size=ftell(file);
rewind(file);
if(size>33554432) //32MB
{
fclose(file);
return 0;
}
//create buffer and read file content
buffer=malloc(33554432);
fread(buffer,1,size,file);
fclose(file);
//create new file name and write new file
strcpy(filename,argv[1]);
strcat(filename,"_");
file=fopen(filename,"w");
{
long i;
for(i=size-1;i>=0;i--)
{
fputc(buffer[i],file);
}
}
fclose(file);
free(buffer);
}
return 0; …Run Code Online (Sandbox Code Playgroud) 对于常规文件,我可以使用 comm命令来查找公共行。
例如我们有两个文件
$ cat f1
line1
line2
line3
line4
line5
$ cat f2
line1
line20
line30
line4
line5
Run Code Online (Sandbox Code Playgroud)
它比较像:
$ comm -12 f1 f2
line1
line4
line5
Run Code Online (Sandbox Code Playgroud)
如何找到匹配行的偏移量以及如何对两个二进制文件进行比较并打印匹配行偏移量?
我一直在使用诸如diff, cmp,comm过去1小时,摸不清头脑。
编辑 1:不是确切的解决方案,但发现 vbindiff 有帮助。
我使用包含几个魔术字节序列的二进制格式。我想将它们作为不可变的静态成员保留在静态类中。
public static class HuffmanConsts
{
// output format: Header, serialized tree (prefix), DataDelimiter, coded data (logical blocks are 8 byte large, Little Endian)
public const string Extension = ".huff";
public static readonly IReadOnlyList<byte> Header = Array.AsReadOnly(new byte[] {0x7B, 0x68, 0x75, 0x7C, 0x6D, 0x7D, 0x66, 0x66}); // string {hu|m}ff
public static readonly IReadOnlyList<byte> DataDelimiter = Array.AsReadOnly(BitConverter.GetBytes(0L)); // eight binary zeroes, regardless of endianness
}
Run Code Online (Sandbox Code Playgroud)
ReadOnlyCollection<byte>(从 返回Array.AsReadOnly())防止外部代码更改值,与byte[].
但是现在,我无法Header通过输出stream.Write(),因为它需要byte[]:
stream.Write(HuffmanConsts.Header, 0, …Run Code Online (Sandbox Code Playgroud) 我对为使用英特尔 Fortran 编译器进行编译而编写的 Fortran 代码有疑问。
我遇到的具体问题是声明OPEN。我尝试重写源代码,以便可以使用免费编译器(即 GNU Fortran)编译它,并且我成功了,但我遇到了一些问题。
有一些带有 的临时文件输出OPEN(access = 'direct', form = 'binary', status = 'replace'...),但form = 'binary'不是标准的,GNU Fortran 编译器不支持。
在网上寻找解决方案后,我发现form = 'unformatted'应该是等效的并且 GNU Fortran 可以处理它。是的,确实如此,我能够编译并且代码运行正确。然而,该代码是科学计算,在以这种方式打开的这些文件中生成大量数据。我的问题是,form = 'unformatted'结果文件比form = 'binary'.
这样,在某些情况下,我没有足够的硬盘空间来成功运行未格式化的格式,而使用二进制文件则可以。是否有英特尔 Fortran 的“二进制文件”的等效项可以与 GNU Fortran 一起使用并产生类似的文件大小?
根据要求,我添加了一个简短的、简化的示例代码:
subroutine init
use module params ! contains param1, param2, param3, ... which are inetger or real
common /params2/ maxi, maxj, maxk, limit, recnum ! integers defined elsewhere
real*8, allocatable …Run Code Online (Sandbox Code Playgroud) 我正在尝试打开由测量设备创建的文件,找到与元数据对应的字节,然后将其他所有内容写入新的二进制文件。(元数据部分不是问题:我知道标题并且可以轻松找到它们。我们不用担心。)
问题是:当我打开文件并将字节写入新文件时,会添加新字节,这会弄乱相关数据。具体来说,每次原始文件中有一个'0A'字节,新文件在它之前就有一个'0D'字节。我经历了几次修改代码以找到问题的迭代。这是最新和最简单的版本,以三种不同的方式产生相同的结果:
import os
import mmap
file_name = raw_input('Name of the file to be edited: ')
f = open(file_name, 'rb')
#1st try: using mmap, to make the metadata sarch easier
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
full_data = s.read(len(s))
with open(os.path.join('.', 'edited', ('[mmap data]' + file_name + '.bin')), 'a') as data_mmap:
data_mmap.write(full_data)
#2nd try: using bytes, in case mmap was giving me trouble
f_byte = bytes(f.read())
with open(os.path.join('.', 'edited', ('[bytes data]' + file_name + '.bin')), 'a') as data_bytes:
data_bytes.write(f_byte)
s.close()
f.close() …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 PowerShell 将无符号整数(其 4 字节 DWORD 二进制表示形式)写入文件,但我尝试过的所有替代方案都只写入文本。
假设我有这个号码:
$number = [Int] 255
文件内容应该是FF000000(二进制),而不是255(文本)。
我不是 PowerShell 专家,因此非常感谢您的帮助。
我正在尝试bytea使用 Ruby 从 PostgreSQL读取一列。问题在于它返回值的十六进制编码字符串bytea。我希望它返回的结果与打开具有相同内容的二进制文件完全相同File.read()。
以下给了我十六进制编码的值:
require 'pg'
conn = PG.connect(...)
res = conn.exec('SELECT bytea_column FROM some_table')
res.each do |r|
raw = r['bytea_column']
puts "#{raw}"
end
Run Code Online (Sandbox Code Playgroud)
我想我需要用来正确PG::TextDecoder::Bytea解码bytea列。这样对吗?如果是这样,它究竟应该如何使用?
我正在尝试将数据文件写入磁盘,以便可以缓存无法放入内存的大量数据。在一些早期测试中,我发现有时会写入数据,有时不会。这是一个示例,显示该过程不起作用:
using System.IO;
using System;
namespace TestBinaryWriter
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
double dFoo = 1234.1234;
BinaryWriter bw = new BinaryWriter(File.OpenWrite("asdf"));
bw.Write(dFoo);
bw.Write(BitConverter.GetBytes(dFoo));
}
}
}
Run Code Online (Sandbox Code Playgroud)
文件“asdf”的内容是空的,我不明白为什么。
binaryfiles ×10
c# ×2
angularjs ×1
binary-data ×1
c ×1
c++ ×1
cmp ×1
comm ×1
diff ×1
download ×1
escaping ×1
file ×1
file-io ×1
filestream ×1
fortran ×1
fwrite ×1
gfortran ×1
immutability ×1
io ×1
javascript ×1
linux ×1
postgresql ×1
powershell ×1
python ×1
ruby ×1