标签: fread

从另一个文件C++中的文件名创建文件

我正在使用C++对几个大文件进行排序.我有一个文本文件,其中包含所有输入文件的名称,每行一个.我想一次读取一个文件名,将它们存储在一个数组中,然后用这些名称创建一个文件.现在,我正在使用fopen和fread,它需要字符数组(我试图优化速度),所以我的文件名被读入一个字符数组数组.但是,这些数组需要预先确定最大大小,因此如果文件名小于最大值,则其余数据充满了垃圾.然后,当我尝试在fopen()中使用该数组作为文件名时,它无法识别该文件,因为它在字符串的末尾有垃圾.我怎么解决这个问题?这是我的代码:

 #include <iostream>
#include <fstream>
#include <string>
#include "stdafx.h"
#define NUM_INPUT_FILES 4

using namespace std;



FILE *fp;
unsigned char *buff;
FILE *inputFiles[NUM_INPUT_FILES];


int _tmain(int argc, _TCHAR* argv[])
{


    buff = (unsigned char *) malloc(2048);
    char j[8];
    char outputstring[] = "Feelings are not supposed to be logical. Dangerous is the man who has rationalized his emotions. (David Borenstein)";

    fp = fopen("hello.txt", "r");

    string tempfname[NUM_INPUT_FILES];
    //fp = fopen("hello.txt", "r");
    for(int i=0;i<NUM_INPUT_FILES;i++)
    {
        fgets(tempfname[i], 20, fp);
        cout << tempfname[i];
    }
    fclose(fp);

    for(int i=0; …
Run Code Online (Sandbox Code Playgroud)

c++ fopen fread character-arrays

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

fwrite不会在C中保存完整数组

我有一个668x493的数组,我想保存.所以我正在做以下事情.

data:是一个指向保存值的数组的指针.

long lSize;
FILE* image_save;
image_save=fopen("image_save_file.bin","w+b");
fwrite(data,1,329324,image_save);
Run Code Online (Sandbox Code Playgroud)

但是,当我读回这个数组时:

char* check_image;

p1File=fopen("image_save_file.bin","r+b");

fseek (p1File , 0 , SEEK_END);
lSize = ftell (p1File);
fseek (p1File , 0 , SEEK_SET);
Run Code Online (Sandbox Code Playgroud)

当我检查lSize时,我看到它327680 ???

所以,当我做恐惧时,我只获得327680值!

请问,你能指出我的错误吗?

c c++ fwrite fread

0
推荐指数
2
解决办法
860
查看次数

将文件读入内存?

如果我明确声明缓冲区大小,我似乎只能将文件读入内存.这有效

#include <stdio.h>
int main(){
  FILE *fp = fopen("test.log", "rb");
  char buffer[37];
  fread(buffer, 1, 36, fp);
  printf("%s", buffer);
}
Run Code Online (Sandbox Code Playgroud)

这会将垃圾添加到输出中

#include <stdio.h>
int main(){
  FILE *fp = fopen("test.log", "rb");
  fseek(fp, 0, SEEK_END);
  long siz = ftell(fp);
  rewind(fp);
  char buffer[siz + 1];
  fread(buffer, 1, siz, fp);
  printf("%s", buffer);
}
Run Code Online (Sandbox Code Playgroud)

c pointers fread

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

C - 在阅读之前查找文件结尾

我有一个从二进制文件中读取“块”的类。我这样使用它:

while(log.HasNextBlock()) {
    block = log.GetNextBlock();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我在文件末尾,我需要检查函数 HasNextBlock() 的内部,在这种情况下我将返回 false。我正在尝试使用 feof() 来检查,但我读到在调用 feof() 之前我必须执行读取操作,但在我的情况下,读取操作是在 GetNextBlock() 中完成的,即在调用 feof 之后()。

有没有办法查看我是否在二进制文件的末尾而不执行会修改“上下文”的操作(即不更改文件中的当前位置或任何其他变量)?

谢谢你的帮助 !:)

c binary fread eof feof

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

内存泄漏通过new []而没有调用new

我从以下函数中获取内存泄漏:

int ReadWrite(int socket, char *readfile) {
  FILE *rf = NULL;
  rf = fopen(readfile, "rb");
  fseek(rf, 0, SEEK_END);
  int len = ftell(rf);
  rewind(rf);

  char readbuf[len + 1];

  int res = fread(readbuf, len, 1, rf);
  readbuf[len + 1] = '\0';
  fclose(rf);
  while (1) {
    int wres = write(socket, readbuf, res);
    if (wres == 0) {
      cerr << "socket closed prematurely" << endl;
      close(socket);
      return EXIT_FAILURE;
    }
    if (res == -1) {
      if (errno == EINTR)
        continue;
      cerr << "socket write failure: …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind memory-leaks new-operator fread

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

C中最后一个fread()中的信息大小

#define MAXSIZE 256

fread(buff, sizeof(MAXSIZE), 1, infp);
Run Code Online (Sandbox Code Playgroud)

最多说我们需要阅读3次,阅读2次后剩下的东西infp都要小于MAXSIZE.我们如何确定上次阅读时的信息大小?

c fread

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

使用指针C写入文件/从文件读取

我编写了一个程序,将指针写入文件(fwrite)并从文件读取指针(fread)。但是,该程序似乎没有在文件中写入任何内容,也没有从文件中读取任何内容。它只是将指针的最终增量打印5次并退出。谁能在我的语法中发现似乎正在执行此操作的错误/错误?

#include <stdio.h>

int main() {
    FILE *fTest;
    int *testPtr;
    int x = 10;
    
    if ((fTest = fopen("test.c", "wb")) == NULL) {
        printf("Error!");
    }

    testPtr = &x;
    int i;
    for (i = 0; i < 5; i++) {
        fwrite(testPtr, sizeof(int), 1, fTest);
        *testPtr += 1;
    }
    
    for (i = 0; i < 5; i++) {
        fread(testPtr, sizeof(int), 1, fTest);
        printf("%d", *testPtr);
    }

    fclose(fTest);
}
Run Code Online (Sandbox Code Playgroud)

c pointers file fwrite fread

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

PHP保存到文件脚本,在升级到PHP 7.0后出错

我有一个相当简单的脚本,应该在文件中添加新的字符串.

if (isset($_POST["score"]))
{
$myFile = $_SERVER['DOCUMENT_ROOT']."/xx/zz.txt";
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh);

$File = $_SERVER['DOCUMENT_ROOT']."/xx/zz.txt"; 
$Handle = fopen($File, 'w');
$Data = $_POST["score"]."\n".$theData; 
fwrite($Handle, $Data); 
fclose($Handle); 
}
Run Code Online (Sandbox Code Playgroud)

升级到PHP 7.0后,我收到错误:

fread() expects parameter 1 to be resource, boolean given in /home/zzz/public_html/zzz.php on line 7
fclose() expects parameter 1 to be resource, boolean given in /home/zzz/public_html/zzz.php on line 8
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么会出现这个错误以及如何修复它?什么是PHP 7.0导致它突然停止工作?

php fopen fwrite fread php-7

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

使用C++将用户定义的数据类型保存到文件中

我有一个这样的课:

struct SomeClass{

    SomeClass(){}

    SomeClass(const SomeClass& rhs):
    _m1(rhs._m1),
    _m2(rhs._m2),
    _m3(rhs._m3),
    _m4(rhs._m4){}

    SomeClass& operator=(const SomeClass& rhs){
    // same as above
    return *this;
    }

    int _m1;
    std::vector<int> _m2;
    std::vector<int> _m3;
    int _m4;
};
Run Code Online (Sandbox Code Playgroud)

在我的程序中的某个时刻,我想保存存储在SomeClass对象中的数据供以后使用:

    SomeClass someObj = arr->getBest(); // arr is a pointer to AnotherClass,
                                        // in which different SomeClass
                                        // objects are initialized and then
                                        // involved in various 
                                        // computations in AnotherClass, 
                                        // finally the best one SomeClass 
                                        // object will be save here
    fwrite(&someObj, sizeof(SomeClass), 1, saveFile); …
Run Code Online (Sandbox Code Playgroud)

c++ fwrite fread

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

为什么以二进制模式读取以fffe开头的文件返回1

我正在尝试读取UTF文件,并决定以二进制模式读取它,并跳过非ASCII,因为文件基本上由有效的英文文本组成。我坚持fread返回1而不是请求的字节数。恕我直言,print_hex的第一个输出显示它已读取多个字符。我已经阅读了一些在C中读取二进制文件的示例,例如,在C中读取/写入到二进制文件,在fread此处阅读有关示例,例如https://en.cppreference.com/w/c/io/fread以及此处fread的真正工作原理?,仍然困惑为什么会返回1. File hexdump,以及完整的C代码和下面的输出。

添加:由gcc编译,在Linux上运行。

文件:

00000000  ff fe 41 00 41 00 42 00  61 00 0d 00 0a 00 41 00  |..A.A.B.a.....A.|
00000010  41 00 45 00 72 00 0d 00  0a 00 66 00 73 00 61 00  |A.E.r.....f.s.a.|
00000020  6a 00 0d 00 0a 00 64 00  73 00 61 00 66 00 64 00  |j.....d.s.a.f.d.|
00000030  73 00 61 00 66 00 64 00  73 00 61 …
Run Code Online (Sandbox Code Playgroud)

c fread

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

标签 统计

fread ×10

c ×6

c++ ×4

fwrite ×4

fopen ×2

pointers ×2

binary ×1

character-arrays ×1

eof ×1

feof ×1

file ×1

memory-leaks ×1

new-operator ×1

php ×1

php-7 ×1

valgrind ×1