我想创建一个表示整数的二进制文件.我认为该文件应该是4个字节.我用linux.怎么做?另一个问题:如何将该文件的内容分配给C中的整数?
我正在尝试使用以下代码读取二进制文件:
open(F, "<$file") || die "Can't read $file: $!\n";
binmode(F);
$data = <F>;
close F;
open (D,">debug.txt");
binmode(D);
print D $data;
close D;
Run Code Online (Sandbox Code Playgroud)
输入文件是16M; debug.txt只有大约400k.当我查看emacs中的debug.txt时,最后两个字符是^ A ^ C(SOH和ETX字符,根据记事本++),尽管debug.txt中存在相同的模式.文件中的下一行确实有一个^ O(SI)字符,我认为这是该特定字符的第一次出现.
我如何阅读整个文件?
我在办公室服务器上有大约10万个文件(图像,pdf等等).每天文件数增加约100-500个项目,大约20-50个旧文件发生变化.
将Web服务器与这些文件同步的最佳方法是什么?Mercurial,GIT等任何系统都可以提供帮助吗?(在办公室服务器上,我将提交更改,并且Web服务器会定期进行更新)?
第二个问题是,在Web服务器上我有用户生成的内容(二进制文件)(其他文件).这些用户每天上传大约1000-2000个新文件.旧文件不会更改.我需要将这些文件备份到本地计算机.像Merurial,GIT这样的系统可以帮助解决这种情况吗?(在网络服务器上我将通过cron提交这些文件,在本地机器上我会做更新)
谢谢
UPD.
Office服务器是Windows Server 2008 R2 Web服务器是Debian 5 lenny
我试图使用DataOupPutStream.write()方法写入大于256的值.当我尝试使用DataInputStream.read()它读取相同的值时,它将返回0.因此,我使用DataOutputStream.writeInt()和DataInputStream.readInt()方法来编写和检索大于256的值,它工作正常.
请参考下面的代码片段我想知道编译器的行为,就像它在语句in.readInt()内部所做的那样while.
FileOutputStream fout = new FileOutputStream("T.txt");
BufferedOutputStream buffOut = new BufferedOutputStream(fout);
DataOutputStream out = new DataOutputStream(fout);
Integer output = 0;
out.writeInt(257);
out.writeInt(2);
out.writeInt(2123);
out.writeInt(223);
out.writeInt(2132);
out.close();
FileInputStream fin = new FileInputStream("T.txt");
DataInputStream in = new DataInputStream(fin);
while ((output = in.readInt()) > 0) {
System.out.println(output);
}
Run Code Online (Sandbox Code Playgroud)
运行此代码段时的输出是:
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readInt(Unknown Source)
at compress.DataIOStream.main(DataIOStream.java:34)
257
2
2123
223
2132
Run Code Online (Sandbox Code Playgroud)
但是当我在调试模式下运行时,我得到以下输出:
2123
223
2132
Exception in …Run Code Online (Sandbox Code Playgroud) 我想将一些Omnigraffle文件置于版本控制之下.Omnigraffle将这些文件存储为.graffle目录.
我希望git将这些目录视为单个文件.
我该怎么办?
我试图把*.graffle binary在.gitattributes,但它不工作.
谢谢!
任务是将二进制文件解析到内存中.但是,我不知道分配所需的内存量.
哪种方法更可取:在解析例程中进行多个小malloc,或者首先遍历文件以确定所需的内存量,然后再次解析?
任何提示都表示赞赏.
这是我从任何大小的文件读取的循环,并且每次写入1016字节的char*数据包1016字节然后发送它(发送未包括在内).
seekg()是必要的吗?或者读取是否已将指针移动到下一个块的前面?
ifstream file (packet.message, ios::in|ios::binary|ios::ate);
if(file.is_open()) {
size = file.tellg();
file.seekg(0, ios::beg);
for(int i = 0; !ios::eof; i++) {
memset(packet.message,0,1016*sizeof(char));
file.read(packet.message,1016*sizeof(char));
file.seekg(i*1016*sizeof(char));
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是写入文件的问题,因为你只是一直写到文件的大小正确.
编辑:在if语句中添加了整个代码.
所以我有一个关联将一对Ints与一个Vector[Long]最大为10000 的s 相关联,并且我有几十万到一百万这样的数据.我想将它存储在一个文件中,以便以后在Scala中处理.
显然,以纯文本格式存储它会占用太多空间,所以我一直试图通过编写Byte流来弄清楚如何做到这一点.但是我不太确定这是否会起作用,因为在我看来byteValue(),a Long返回Byte仍然是4个字节长的表示,因此我不会保存任何空间?我没有太多使用二进制格式的经验.
似乎Scala标准库有BytePickle可能是我想要的,但后来被弃用了?
我有一个代码,我几次访问二进制文件.每次调用该函数时,它都会打开文件进行读取,并且只读取所需的字节数(比如n每次的字节数).
二进制文件包含时间序列数据,我希望它能够通过循环运行函数调用,每次调用函数打开同一个文件时,它需要读出下一个块数据,即我不希望每次都重置文件指针.有没有办法做到这一点?
该函数看起来像这样:
int readBinary(float *binImage, int gelements) {
imageFile = fopen("tmpImageFile", "r");
if (imageFile == NULL) {
fprintf(stderr, "Error opening file\n");
return (1);
}
fread(binImage, sizeof(float), gelements, imageFile);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的主代码中,我想通过循环运行它,每次都给它一个binImage大小的数组gelements.gelements * nLoop如果这是可以避免的,我宁愿不给它一个大小的数组.
我试图以二进制格式编写文件.我有以下代码,但它以文本格式保存文件.
#include <iostream>
#include <fstream>
using namespace std;
int main(){
std::string ref = "Ecoli. 123";
unsigned int size = 124;
std::ofstream supp_info_output("binary_file", std::ios::out | std::ios::binary); // saving file
supp_info_output << ref << std::endl;
supp_info_output << size << std::endl;
supp_info_output.close();
std::ifstream supp_info_input("binary_file", std::ios::in | std::ios::binary); // loading file
std::string supp_info_line;
while( std::getline( supp_info_input, supp_info_line ).good() ){
std::cout << supp_info_line << std::endl;
}
supp_info_input.close();
}
Run Code Online (Sandbox Code Playgroud)
在代码中,我正在编写一些数据,然后再次读取数据.读写没有问题,但我需要二进制格式的文件.