标签: fread

ifstream与fread的二进制文件

哪个更快?ifstreamfread
我应该使用哪个读取二进制文件?

fread()将整个文件放入内存。
因此fread,访问之后,访问它创建的缓冲区很快。

是否ifstream::open()将整个文件放入内存?
还是我们每次运行都会访问硬盘ifstream::read()

所以... ifstream::open()== fread()吗?
或(ifstream::open(); ifstream::read(file_length);)== fread()

还是我应该使用ifstream::rdbuf()->read()

编辑: 我的readFile()方法现在看起来像这样:

void readFile()
{
    std::ifstream fin;
    fin.open("largefile.dat", ifstream::binary | ifstream::in);
    // in each of these small read methods, there are at least 1 fin.read()
    // call inside.
    readHeaderInfo(fin);
    readPreference(fin);
    readMainContent(fin);
    readVolumeData(fin);
    readTextureData(fin);
    fin.close();
}
Run Code Online (Sandbox Code Playgroud)

小方法中的多个fin.read()调用会降低程序速度吗?我应该只在main方法中使用1 fin.read()并将缓冲区传递给较小的方法吗?我想我要写一个小程序进行测试。

谢谢!

c++ file-io ifstream fread

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

我将文本读入缓冲区后如何逐行读取?

首先,我通过调用fread将文本读入缓冲区,然后我想逐行读取它,怎么做?我尝试使用sscanf,但它似乎不起作用.

char textbuf[4096];
char line[256];
FILE *fp;
fp = fopen(argv[1],"r");
memset(textbuf, 0, 4096);
fread(textbuf, 1, 4096, fp);
Run Code Online (Sandbox Code Playgroud)

我知道使用fgets是一个好方法.我只是想知道天气这种方法可以做同样的事情.

c fread

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

为什么ftell()在fread()之后显示错误的位置?

尝试使用c fread()调用从简单的文本文件中读取时,我收到一个非常奇怪的错误.
我做了一个非常简单的程序来显示错误:

int main(int argc ,char ** argv) {
  FILE* fh = fopen("adult.txt","r");
  if(fh==NULL){
    printf("error opening file\n");
    exit(0);
  }

  int s = 1000;
  printf("cur before=%d\n",ftell(fh));
  char* b = malloc (sizeof(char)*s);
  int k =fread(b,sizeof(char),s,fh);
  printf("cur after reading %d bytes =%d\n",k,ftell(fh));

  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我得到的是输出:

cur before=0
cur after reading 1000 bytes =1007
Run Code Online (Sandbox Code Playgroud)

这是正常的吗?fread返回数字'1000',但光标(用ftell())显示1007,任何帮助将不胜感激.

c file fread

5
推荐指数
2
解决办法
1120
查看次数

编写和读取无符号字符到二进制文件

我正在编写一个简单的程序,写入二进制文件,关闭它,然后读取刚刚写入的数据.我正在尝试编写一个无符号字符数组.我在阅读数据时遇到了一些问题.我不确定我是在写不正确的数据还是读错了.当我读取数据时,我得到的输出为:5 bytes对于读取的字节数,但我得到的输出与我写入文件的值不同.

FILE *binFile = fopen("sample","wb");

unsigned char data[5]={5,10,15,20,25};
fwrite(data,sizeof(unsigned char),sizeof(data),binFile);
fclose(binFile);

unsigned char data2[5];
binFile = fopen("sample","rb");
int s = fread(data2,1,sizeof(data),binFile);
fclose(binFile);
cout<<s<<" bytes\n";
for(int i=0; i<5;i++)
        cout<<data2[i]<<" ";
cout<<"\n";
Run Code Online (Sandbox Code Playgroud)

c c++ file-io fwrite fread

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

将文件读入结构体

我正在尝试将文件的内容读入结构中。该结构如下所示:

    typedef struct{
            unsigned char e_ident[EI_NIDENT] ;
            Elf32_Half e_type;
            Elf32_Half e_machine;
            Elf32_Word e_version;
            Elf32_Addr e_entry;
            Elf32_Off e_phoff;
            Elf32_Off e_shoff;
            Elf32_Word e_flags;
            Elf32_Half e_ehsize;
            Elf32_Half e_phentsize;
            Elf32_Half e_phnum;
            Elf32_Half e_shentsize;
            Elf32_Half e_shnum;
            Elf32_Half e_shstrndx;
    } Elf32_Ehdr;
extern Elf32_Ehdr elfH;
Run Code Online (Sandbox Code Playgroud)

它基本上是一个ELF头文件。所以,无论如何我想将文件的内容加载到这个结构中。

该函数看起来像这样。

Elf32_Ehdr elfH;
int load(char* fname){
        FILE* file = fopen(fname,"r");

        if(NULL == file) return 0;

        fread(&elfH, 1, 52, file);

        fclose(file);
        return 1;
}
Run Code Online (Sandbox Code Playgroud)

因为它似乎无法正常工作。elfH 的内容不符合预期。可能是什么问题?我是不是该

c struct fread

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

如何使用fread()与"https"网址方案?

在用于fread()的R文档中,据说"input"参数可以是以http://或file://开头的URL.但是在" data.table简介 "中,vignette fread()与https一起使用:

flights <- fread("https://raw.githubusercontent.com/wiki/arunsrinivasan/flights/NYCflights14/flights14.csv")
Run Code Online (Sandbox Code Playgroud)

这导致"download.file中的错误(输入,tt,mode ="wb"):不支持的URL方案"控制台消息.

我无法弄清楚如何让它发挥作用.我已经尝试过设置选项(download.file.method ="curl")或"auto",但似乎没有任何帮助.

我究竟做错了什么?

https r fread data.table

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

与grepl一起战斗

我有一个数据(大数据125000行,~20 MB),其中一些具有特定字符串的行需要删除,并且在读取过程中需要选择一些列.

首先,我发现grepl函数不能正常工作,因为fread在这个问题中也将数据作为一列表示.

可以在此处找到示例数据(通过遵循@akrun建议)和这样的数据标题

头(sum_data)

TRIAL :            1        3331        9091
  TRIAL :            2  1384786531   278055555
    2     0.10     0.000E+00 -0.0047 -0.0168 -0.9938    -0.0087 -0.0105 -0.9709     0.0035  0.0079 -0.9754     0.0081  0.0023  0.9997      -0.135324E-09    0.278754E-01
    2     0.20     0.000E+00 -0.0121  0.0002 -0.9898    -0.0364 -0.0027 -0.9925    -0.0242 -0.0050 -0.9929     0.0029 -0.0023  0.9998      -0.133521E-09    0.425567E-01
    2     0.30     0.000E+00  0.0193 -0.0068 -0.9884     0.0040  0.0139 -0.9782    -0.0158  0.0150 -0.9814     0.0054 -0.0008  0.9997      -0.134103E-09    0.255356E-01
    2     0.40     0.000E+00 -0.0157  0.0183 -0.9879 …
Run Code Online (Sandbox Code Playgroud)

r fread data.table

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

为什么fread插入回车(\ r)到data.table?

我正在使用data.table::freadWindows 10计算机上的.csv文件中读取数据.数据正确读入read.csv; 但是,当我fread用来读入数据时,结果data.table的每一行中的所有最终列都以a结尾\r,可能表示回车.这会导致数字字段被赋予字符数据类型.(而不是数字文字4.53,行结束单元格将包含字符文字4.53\r.)

为什么会出现这个错误?有没有办法通过函数调用直接解决这个问题fread

更新

verbose = TRUE使用参数时,我得到以下内容

Input contains no \n. Taking this to be a filename to open
File opened, filesize is 0.000001 GB.
Memory mapping ... ok
Detected eol as \n only (no \r afterwards), the UNIX and Mac standard.
Positioned on line 1 after skip or autostart
This line is the autostart and not blank so searching up for the last …
Run Code Online (Sandbox Code Playgroud)

csv r fread data.table

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

读取大数据集时,在R 3.4中找不到函数“ fread”

我已经安装了“ microbenchmark”软件包,然后运行:library(microbenchmark)

现在,我正在尝试读取一个csv文件,但收到错误消息:"fread" function not found

setwd("C:/Data Analytics/R Assignments")
library(microbenchmark)
data <- fread("BigDiamonds.csv") 

Error in
fread("BigDiamonds.csv") : could not find function "fread"
Run Code Online (Sandbox Code Playgroud)

我一直在使用R 3.4。这可能是问题吗?

r fread rstudio

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

处理字符串的最快方法

我有一个文本文件来阅读和处理20000行.在文本文件中,我想读取点坐标并分配给DirectX进行渲染.文本文件的快照

我使用std :: ifstream,getline,stringstream来获取点坐标.在构建win32程序然后开始运行之后,读取并存储数组中的点坐标需要很长时间.(5分钟通过20000行文本文件).代码如下:

struct PointCoord { std::string PtName; float PtX = 0.0; float PtY = 0.0;}
PointCoord *PointPtr = NULL;
PointCoord pointcoord;

std::ifstream File_read(FileNameTXT);    
while (getline(File_read, TextHandler))
        {
            std::istringstream iss;
            std::string skip;
            if (TextHandler.find("  POINT ") != std::string::npos)
            {
                iss.str(TextHandler);
                std::string TempX, TempY;
                iss >> skip;
                iss >> pointcoord.PtName;                         

                //pointcoord pass value to PointCoord
                iss >> TempX;
                iss >> TempY;

                pointcoord.PtX = std::stof(TempX.c_str());
                pointcoord.PtY = std::stof(TempY.c_str());

                //dynamically store the points coordiantes
                if (PointPtr == NULL)
                {
                    PointPtr = …
Run Code Online (Sandbox Code Playgroud)

c++ fwrite fread

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

标签 统计

fread ×10

c ×4

r ×4

c++ ×3

data.table ×3

file-io ×2

fwrite ×2

csv ×1

file ×1

https ×1

ifstream ×1

rstudio ×1

struct ×1