标签: fread

如何检查PHP流资源是可读还是可写?

在PHP中,如何检查流资源(或文件指针,句柄或您想要调用它们的任何内容)是可读还是可写?例如,如果您遇到的情况是您对资源的打开或创建方式一无所知,那么如何检查它是否可读?你如何检查它是否可写?

根据我所做的测试(只使用PHP 5.3.3的常规文本文件),fread()当资源不可读时,不会在任何级别抛出任何错误.它只返回一个空字符串,但它也为空文件执行此操作.理想情况下,最好选择不修改资源本身的检查.通过尝试从中读取资源来测试资源是否可读将改变指针的位置.

相反,fwrite()当资源不可写时,不会在任何级别抛出任何错误.它只返回零.这稍微有用一些,因为如果你试图将一定数量的字节写入文件并fwrite()返回零,那么你就会知道出了什么问题.但是,这仍然不是一种理想的方法,因为在我需要写入它之前知道它是否可写会更好,而不是试图写入它并查看它是否失败.

此外,理想情况下,检查应该适用于任何类型的流资源,而不仅仅是文件.

这可能吗?有这样的事吗?我一直找不到任何有用的东西.提前感谢您的回答.

php fopen fwrite fread

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

在文本文件中写入和读取php对象?

我想在文本文件中编写一个php对象.php对象就是这样

 $obj = new stdClass();
 $obj->name = "My Name";
 $obj->birthdate = "YYYY-MM-DD";
 $obj->position = "My position";
Run Code Online (Sandbox Code Playgroud)

我想在一个文本文件中写这个$ obj.文本文件位于此路径中

$filePath = getcwd().DIRECTORY_SEPARATOR."note".DIRECTORY_SEPARATOR."notice.txt"
Run Code Online (Sandbox Code Playgroud)

我想要一种简单的方法将此对象写入文本文件,并希望读取文件以获取我定义的属性.请帮我.

提前致谢.

php fopen file fread

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

PHP - 返回文件的最后一行?

我猜它是fgets,但我找不到具体的语法.我正在尝试读出(在字符串中我认为更容易)添加到日志文件的最后一行.

php syntax fgets fread

16
推荐指数
4
解决办法
4万
查看次数

如何使用fread和fwrite函数来读写二进制文件?

嗨,在我的项目中,我要读取一个.bin文件,其中包含传感器数据short(16 bit values).我正在使用fread函数进入缓冲区,但我觉得读入没有正确发生.我的意思是我写的东西和我读的东西之间没有一致性.你们能否说出这里出了什么问题?这不是我项目中的代码......我只想在这里验证freadfwrite功能.

#include<stdio.h>
void main()
{
    FILE *fp = NULL;

    short x[10] = {1,2,3,4,5,6,5000,6,-10,11};
    short result[10];

    fp=fopen("c:\\temp.bin", "wb");

    if(fp != NULL)
    {
        fwrite(x, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
        rewind(fp);
        fread(result, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
    }
    else
        exit(0);

    printf("\nResult");
    printf("\n%d",result[0]);
    printf("\n%d",result[1]);
    printf("\n%d",result[2]);
    printf("\n%d",result[3]);
    printf("\n%d",result[4]);
    printf("\n%d",result[5]);
    printf("\n%d",result[6]);
    printf("\n%d",result[7]);
    printf("\n%d",result[8]);
    printf("\n%d",result[9]);

    fclose(fp)
 }
Run Code Online (Sandbox Code Playgroud)

我做了fread()(HEX值)后:

temp.bin:
01 02 03 04 05 06 e1 8e 88 06 ef bf b6 0b...
Run Code Online (Sandbox Code Playgroud)

我做了fwrite()之后

stdout: …
Run Code Online (Sandbox Code Playgroud)

c binaryfiles fwrite fread

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

fread会移动文件指针吗?

简单的问题,

当我使用fread时:

fread(ArrayA, sizeof(Reg), sizeBlock, fp);
Run Code Online (Sandbox Code Playgroud)

我的文件指针,fp向前移动?

c file fread

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

加速 odbc::dbFetch

我正在尝试分析存储在 R 和 Mac 上的 SQL 数据库(MS SQL 服务器)中的数据。典型的查询可能会返回几 GB 的数据,而整个数据库只有几 TB。到目前为止,我一直在使用 R 包odbc,它似乎工作得很好。

不过,dbFetch()好像真的很慢。例如,一个有点复杂的查询在大约 6 分钟内在 SQL 服务器中返回所有结果,但如果我运行它odbc然后尝试dbFetch,需要将近一个小时才能将完整的 4 GB 放入 data.frame。我试过分块获取,这有助于适度:https : //stackoverflow.com/a/59220710/8400969。我想知道是否有另一种方法可以更快地将数据通过管道传输到我的 mac,我喜欢这里的思路:快速读取非常大的表作为数据帧

dbFetch当查询的结果是几GB的数据时,有哪些加速的策略?如果问题是data.frame从较大的表生成对象,是否可以通过以不同方式“获取”来节省成本?还有其他可能有帮助的软件包吗?

感谢您的想法和建议!

sql-server odbc r fread dataframe

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

在R中记录data.table

我在R中使用fread函数将文件读取到data.tables对象.

但是,在阅读文件时,我想跳过以#开头的行,这可能吗?我在fread文档中找不到任何提及.

r fread data.table

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

Python中Matlab的'fread'相当于什么?

我几乎不了解Matlab,需要将一些解析例程转换为Python.它们适用于大型文件,它们本身被划分为"块",并且我从文件顶部的校验和开始就很困难.

Matlab到底发生了什么?

status = fseek(fid, 0, 'cof');
fposition = ftell(fid);
disp(' ');
disp(['** Block ',num2str(iBlock),' File Position = ',int2str(fposition)]);

% ----------------- Block Start ------------------ %
[A, count] = fread(fid, 3, 'uint32');
if(count == 3)
    magic_l = A(1);
    magic_h = A(2);
    block_length = A(3);
else
    if(fposition == file_length)
        disp(['** End of file OK']);
    else
        disp(['** Cannot read block start magic !  Note File Length = ',num2str(file_length)]);
    end
    ok = 0;
    break;
end
Run Code Online (Sandbox Code Playgroud)

fid是当前正在查看的文件iBlock是一个计数器,你在文件中"阻止"它

magic_l和magic_h稍后与校验和有关,这里是代码(直接来自上面的代码):

disp(sprintf('  Magic_L = %08X, Magic_H = %08X, …
Run Code Online (Sandbox Code Playgroud)

python matlab numpy readline fread

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

为什么fread循环需要额外的Ctrl + D来用glibc发出EOF信号?

通常,为了向连接到Linux终端上的标准输入的程序指示EOF,如果我只按Enter键,则需要按Ctrl + D一次,否则按两次.但我注意到patch命令不同.有了它,如果我按下Enter键,我需要按两次Ctrl + D,否则按三次.(cat | patch相反,如果我在输入任何实际输入之前按下Ctrl + D,它就没有这种奇怪之处.)深入研究patch源代码,我追溯到它的方式循环fread.这是一个做同样事情的最小程序:

#include <stdio.h>

int main(void) {
    char buf[4096];
    size_t charsread;
    while((charsread = fread(buf, 1, sizeof(buf), stdin)) != 0) {
        printf("Read %zu bytes. EOF: %d. Error: %d.\n", charsread, feof(stdin), ferror(stdin));
    }
    printf("Read zero bytes. EOF: %d. Error: %d. Exiting.\n", feof(stdin), ferror(stdin));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在完全按原样编译和运行上述程序时,这是事件的时间表:

  1. 我的程序调用fread.
  2. fread调用read系统调用.
  3. 我输入"asdf".
  4. 我按Enter键.
  5. read系统调用返回5.
  6. freadread再次呼叫系统呼叫.
  7. 我按Ctrl + D.
  8. 该 …

c glibc libc fread eof

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

为什么fread会搞乱我的字节顺序?

我试图解析一个bmp文件,fread()当我开始解析时,它会反转我的字节顺序.

typedef struct{
    short magic_number;
    int file_size;
    short reserved_bytes[2];
    int data_offset;
}BMPHeader;
    ...
BMPHeader header;
    ...
Run Code Online (Sandbox Code Playgroud)

十六进制数据是42 4D 36 00 03 00 00 00 00 00 36 00 00 00; 我正在将十六进制数据加载到struct中fread(&header,14,1,fileIn);

我的问题是幻数应该是0x424d //'BM'fread()它会翻转字节0x4d42 // 'MB'

为什么fread()会这样做,我该如何解决它;

编辑:如果我不够具体,我需要将整个十六进制数据块读入结构,而不仅仅是幻数.我只选择了幻数作为例子.

c struct bmp fread

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

标签 统计

fread ×10

c ×4

php ×3

file ×2

fopen ×2

fwrite ×2

r ×2

binaryfiles ×1

bmp ×1

data.table ×1

dataframe ×1

eof ×1

fgets ×1

glibc ×1

libc ×1

matlab ×1

numpy ×1

odbc ×1

python ×1

readline ×1

sql-server ×1

struct ×1

syntax ×1