标签: binaryfiles

使用Oracle 10g保存和检索二进制文件的最佳方法是什么?

我即将在我们的应用程序中实现一项功能,允许用户"上传"PDF或Microsoft PowerPoint文档,然后应用程序将其提供给查看器中的其他用户(因此他们无法"下载"它在'另存为......'意义上).

我已经知道如何在数据库列中保存和检索任意二进制信息,但由于这将是我们应用程序的一个常用功能,我担心该解决方案会导致数据库表格非常庞大(因为我们知道我们的客户之一会想要放置PowerPoint文档中的视频).

我知道有一种方法可以在Oracle中创建一个"目录"对象,但有没有办法使用此功能来存储和检索保存在数据库服务器上其他位置的二进制文件?

或者我对数据库大小过于偏执?

(为了完整性,我们的应用程序是使用CoreLab/DevArt OraDirect.Net驱动程序到Oracle 10g的.Net WinForms )

.net oracle binaryfiles

1
推荐指数
1
解决办法
4002
查看次数

在C++中是否有一个BinaryReader来读取C#中从BinaryWriter写入的数据?

我已经用C#中的BinaryWriter写了几个整数,char []和其他数据文件.使用BinaryReader读回(在C#中)文件,我可以完美地重新创建文件的所有部分.

但是,试图用C++重新读取它们会产生一些可怕的结果.我正在使用fstream尝试回读数据并且数据未正确读取.在C++中,我设置了一个fstream ios::in|ios::binary|ios::ate并使用seekg来定位我的位置.然后我读取接下来的四个字节,它们写成整数"16"(并正确读入C#).这在C++中读作1244780(不是内存地址,我检查过).为什么会这样?在C++中是否有与BinaryReader相同的东西?我注意到它在msdn上提到过,但是对我来说,Visual C++和intellisense看起来并不像c ++.

编写文件的示例代码(C#):

    public static void OpenFile(string filename)
    {
        fs = new FileStream(filename, FileMode.Create);
        w = new BinaryWriter(fs);

    }

    public static void WriteHeader()
    {
        w.Write('A');
        w.Write('B');
    }

    public static byte[] RawSerialize(object structure)
    {
        Int32 size = Marshal.SizeOf(structure);
        IntPtr buffer = Marshal.AllocHGlobal(size);
        Marshal.StructureToPtr(structure, buffer, true);
        byte[] data = new byte[size];
        Marshal.Copy(buffer, data, 0, size);
        Marshal.FreeHGlobal(buffer);
        return data;
    }

    public static void WriteToFile(Structures.SomeData data)
    {
        byte[] buffer = Serializer.RawSerialize(data);
        w.Write(buffer);
    }
Run Code Online (Sandbox Code Playgroud)

我不确定如何向您显示数据文件.

读取数据的示例(C#):

        BinaryReader reader = new …
Run Code Online (Sandbox Code Playgroud)

c# c++ file-io binaryfiles binaryreader

1
推荐指数
1
解决办法
7971
查看次数

字节交换和C++/C.

我在comp.lang.c ++上做了一个帖子,得到了这个

http://groups.google.com/group/comp.lang.c++/browse_thread/thread/afc946826945bdb1/90850f6a0e0edd2d#90850f6a0e0edd2d

但这仍然不是答案.

我对二进制读操作有点困惑.

我试图用流函数读取二进制文件.这是商业程序(ANSYS)的结果文件,我知道文件的结构,至少从手册中知道.

该文件的结构为记录,程序以fortran编写.所以结构就像

记录长度(int)虚拟整数数据(可以是int,double)虚拟整数

第一个记录是100个整数块,其中这对应于上述表示中的数据.

如果我开始读取文件并读取第一个值,即记录长度(整数),我必须交换字节以获得正确的值100.

我不明白为什么我必须交换字节,因为这个文件是在同一台机器上生成的,它们应该使用相同的系统特定例程,所以这不应该是一个问题,但似乎并非如此.还有其他事情正在发生.我无法理解这一点.软件是否可以强制交换字节,我很难理解原因?

任何评论都表示赞赏.

这是一个天真的测试用例

int main () {
  ifstream myfile;
  char intBuffer[4];
  myfile.open ("truss.rst", ios::binary);
  myfile.read(intBuffer, sizeof(int));
  //cout << *((int*)intBuffer) << endl;
  // if I do not use this portion-
  // I do not get what I want
  char *cptr, tmp;
  tmp = intBuffer[0];
  intBuffer[0] = intBuffer[3];
  intBuffer[3] = tmp;
  tmp = intBuffer[1];
  intBuffer[1] = intBuffer[2];
  intBuffer[2] = tmp;
  // -----------------------------
  cout << *((int*)intBuffer) << endl;

  myfile.close();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

最好的,美国

c c++ binaryfiles

1
推荐指数
1
解决办法
4371
查看次数

保存外汇巨额财务报表数据的最佳方法

我有很多外汇票据数据要保存.我的问题是什么是最好的方法?

这是一个例子:我只从EURUSD对​​中收集1个月的数据.它最初是CSV文件,大136MB,有2465671行.我使用的是一个由以下网址编写的库:http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader,它花了大约30秒来读取所有刻度并将其保存在2465671个对象中.首先,它是否足够快?

其次,有没有比CSV更好的方法?例如,二进制文件可能更快,是否有任何关于任何数据库的推荐是最好的?我试过db4o,但它不是很令人印象深刻.我认为这里有一些开销来保存数据作为对象的属性,当我们必须在db4o的Yap文件中保存2465671对象时.

c# csv binaryfiles

1
推荐指数
1
解决办法
2537
查看次数

将C函数转换为Perl

我试图转换程序cng2jpg.c中提到的C函数convertCNGFileToJPGFile时遇到困难

我一直在尝试在Perl中编写相同的内容,但是没有足够的知识来处理hex,pack和unpack函数.

如果有人可以在Perl中编写类似的代码,我将非常感激,如下所述.

while ((bytesRead = fread(buffer, 1, kBufferSize, inputFile))) {
    if (!isValidCNG) {
        if (bytesRead < 11 || strncmp("\xa5\xa9\xa6\xa9", (char *)(buffer + 6), 4)) {
            fprintf(stderr, "%s does not appear to be a valid CNG file\n", inputFileName);
            return 0;
        }
        isValidCNG = 1;
    }
    for (size_t i = 0; i < bytesRead; i++)
        buffer[i] ^= 0xEF;
    size_t bytesWritten = fwrite(buffer, 1, bytesRead, outputFile);
    if (bytesWritten < bytesRead) {
        fprintf(stderr, "Error writing %s\n", outputFileName);
        return 0;
    } …
Run Code Online (Sandbox Code Playgroud)

perl binaryfiles

1
推荐指数
1
解决办法
134
查看次数

使用vi和hexedit打开二进制文件,为什么竞争不同?

我正在尝试直接编辑二进制文件,我知道两个编辑器,vi和hexedit.但是当我使用它们单独打开一个二进制文件时,cotens是不同的.以下是我的所作所为.

首先,我使用"dd if =/dev/sda of = mbr bs = 512 count = 1"来生成包含mbr数据的二进制文件.然后我用"hexedit mbr"打开它,它会显示:begin:

00000000   EB 63 90 D0  BC 00 7C 8E  C0 8E D8 BE  00 7C BF 00 
00000010   06 B9 00 02  FC F3 A4 50  68 1C 06 CB  FB B9 04 00
00000020   BD BE 07 80  7E 00 00 7C  0B 0F 85 0E  01 83 C5 10
Run Code Online (Sandbox Code Playgroud)

结尾:

000001E0   FF FF 83 FE  FF FF 00 40  D6 02 00 38  2B …
Run Code Online (Sandbox Code Playgroud)

linux vi mbr binaryfiles hex-editors

1
推荐指数
1
解决办法
3万
查看次数

使用FILE*的二进制文件I/O

我一直在网上搜索,实现如图所示的信息,但由于我不明白的原因,我无法让这个非常简单的代码工作.它应该是一个简单的健全检查.我正在使用FILE*来获得速度(速度是这里的优先级).一,变量......

#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>

using namespace std;

int main()
{

//Declaration
int g = 1, dim_hi = 5, pop = 6;//variables I'll use to write to binary file
char OA = 'D';//variable I'll use to write to binary file

const short d_size = sizeof(double);
const short c_size = sizeof(char);
const short i_size = sizeof(int);
FILE * outFile;

int read_g = 0, read_dim = 0, read_pop = 0;//variables I'll use to READ from file
char read_oa …
Run Code Online (Sandbox Code Playgroud)

c c++ binaryfiles

1
推荐指数
1
解决办法
327
查看次数

Fortran 90中二进制文件数据读取不正确

我正在阅读用不同程序编写的二进制文件.开放和阅读的陈述似乎是成功的,我在之前的帖子中得到了帮助.但是,读入的数据与文件不匹配.我已经初始化了2D数组但是在读入文件之后,数组不保存数据,但看起来是一个未初始化的数组.我已经发布了下面的代码,用于读取和打印出数组.有什么想法吗?

       allocate(dummy(imax,jmax))

       dummy = 0.0
       open(unit=io, file=trim(input), access='direct', iostat=ioer, &
            status='old', action='READ', recl=imax*jmax*4)

       if(ioer/=0) then
        print*, 'Cannot open file'
       else
        print*,'success opening file'
       end if

       j=0
       k=0
       read(unit=io,rec=1,iostat=ioer) dummy!(j,k)
       if(ioer/=0) then
         print*, 'Cannot open file'
       else
         print*,'success opening file'
       end if

       size: do j=1, imax
           do k=1, jmax
             if(dummy(j,k) > 0.) print*,'i-',j,'j-',k,'frp-',dummy(j,k)
           end do 
       end do size
       print*,'j-',j,'k-',k
Run Code Online (Sandbox Code Playgroud)

这是原始写的:

  out_file = trim(output_dir)//'SEVIRI_FRP_.08deg_'//trim(season)//'.bin'

  print*, out_file
  print*, i_max,' i_max,',j_max,' j_max'

  open (io, file = out_file, access = 'direct', status = 'replace', recl …
Run Code Online (Sandbox Code Playgroud)

fortran binaryfiles multidimensional-array file-read

1
推荐指数
1
解决办法
567
查看次数

用于存储派生信息的存储库(构建工件)

我正在寻找一个"存储库"来存储派生信息(构建工件).我们有一个存储库(目前是Mercurial)来存储我们的源代码.当某些东西被推送到源存储库时,代码会通过一个持续集成服务器,我们会进行增量构建,因此会更改一些dll.这应该添加到一些"存储库",以便每个人都可以使用该版本,而无需再次进行构建.我正在寻找以下功能:

  • 应该很容易更新源代码并获取相应的二进制文件(我们可能会为此创建一个脚本)
  • 您应该轻松地立即获取所有二进制文件(不仅是在上一次增量构建期间更改的那些二进制文件.
  • 未更改的二进制文件只能在存储库中存储一次.
  • 更新源代码和二进制文件时,只应传输更改的二进制文件(而不是所有二进制文件).这类似于源代码所发生的情况.
  • 更新到某个版本时,只应在本地存储该版本,而不是完整的历史记录.
  • 我们应该能够在一段时间后从二进制"存储库"中删除某些版本.但是,如果后续增量构建仍然需要dll,那么这些dll当然不应该从"存储库"中完全删除

什么符合这些要求?

binaryfiles repository archiva nexus artifactory

1
推荐指数
1
解决办法
351
查看次数

从二进制文件写入和读取不起作用

所以,我想把9个数字写入二进制文件,然后从该文件中读取它们并将它们打印到屏幕上,但由于某种原因它不起作用,我无法弄清楚为什么.我试过在互联网上寻找答案,但似乎没有任何帮助.如果有人能指出我的代码中的错误(这可能非常明显,但我是c的新手),我会非常感激.这是代码:

int main()
 {
    FILE *f;
    if(f=fopen("dat", "wb") == NULL){
      return 1;
    }
   int c;
   for(int i = 0; i < 9; i++){
     c = fwrite(&i, sizeof(int), 1, f);
     printf("%d",c); //it prints 0 every single time, as if nothing was written in the file
  }
  fclose(f);
  if(f=fopen("dat", "rb+")==NULL){
    return 1;
  }
  int a;
  while(fread(&a, sizeof(int), 1, f)){
    printf("%d\n", a);
  }
  fclose(f);
}
Run Code Online (Sandbox Code Playgroud)

c binaryfiles

1
推荐指数
1
解决办法
66
查看次数