标签: fwrite

在PHP中用文件写一个新行

我的代码:

$i = 0;
$file = fopen('ids.txt', 'w');
foreach ($gemList as $gem)
{
    fwrite($file, $gem->getAttribute('id') . '\n');
    $gemIDs[$i] = $gem->getAttribute('id');
    $i++;
}
fclose($file);
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它是\n作为字符串写的,所以文件看起来像这样:

40119\n40122\n40120\n42155\n36925\n45881\n42145\n45880
Run Code Online (Sandbox Code Playgroud)

从Google开始它告诉我使用\r\n,但是\r回车似乎不是我想做的.我只是希望文件看起来像这样:

40119
40122
40120
42155
36925
45881
42145
45880
Run Code Online (Sandbox Code Playgroud)

谢谢.

php fopen newline fwrite linefeed

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

如何获取结构数据的hexdump

 ....
 finalize(char *hdrs, sendip_data *headers[], int index,
                    sendip_data *data, sendip_data *pack)
 {

 ........
Run Code Online (Sandbox Code Playgroud)

出于调试目的,我想要一个datapack类型的十六进制转储,它们是sendip_data一种非常复杂的结构.实际上它们包含一些二进制信息,所以我不确定我的项目的输出是否正确.因此,出于调试目的,我想将数据写入文件,以便我可以使用hexdump,如下所示 -

$hexdump -C file.txt
Run Code Online (Sandbox Code Playgroud)

另外因为这是一个/ w数据包的运行时生成所以我也不确定我认为需要的长度datapack结构fread / fwrite.所以请给我一些建议.

c pointers hexdump fwrite binary-data

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

在PHP中写入文本文件时,换行符不起作用

我有以下测试脚本:

<?php

$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "Floppy Jalopy\n";
fwrite($fh, $stringData);
$stringData = "Pointy Pinto\n";
fwrite($fh, $stringData);
fclose($fh);

?>
Run Code Online (Sandbox Code Playgroud)

然而,当运行并打开usign记事本时,数据将在一行中返回而不会中断:

软盘Jalopy(疯狂的盒子)Pointy Pinto(疯狂的盒子)

我无法找到"疯狂的盒子"的合适角色,但它是一个非常疯狂的盒子.是什么赋予了!

php fopen fwrite text-files

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

什么更有效 - 将日志存储在SQL数据库或文件中?

我经常用cron加载很少的脚本.现在我不存储任何日志,所以如果任何脚本无法加载,我会看到结果之前不会知道它 - 即使我注意到结果不正确,我也做不了什么,因为我不知道知道哪个脚本失败了.

我决定存储日志,但我仍然不知道该怎么做.所以,我的问题是 - 什么更有效 - 将日志存储在sql数据库或文件中?

我可以在我的mysql数据库中创建'logs'表并将每个日志存储在单独的行中,或者我可以使用php的file_put_contents或fopen/fwrite将日志存储在单独的文件中.

我的脚本在工作时每分钟大约会增加5个日志(总计).我做了很少的测试来确定什么更快--fopen/fwrite或mysql的插入.我将一个"插入"语句循环3000次以制作3000行并循环fopen/fwrite 3000次以制作带有示例文本的3000个文件.Fwrite的执行速度比sql的插入快4-5倍.我做了第二个循环 - 我循环'select'语句并将其分配给字符串3000次 - 我还使用'fopen'打开了3000个文件并将结果分配给字符串.结果是一样的 - fopen/fwrite完成任务的速度提高了4-5倍.

那么,对于所有有经验的程序员 - 您在存储日志方面的经验是什么?有什么建议?

// 04.09.2011编辑 - 谢谢大家的答案,他们帮助了很多.每个帖子都很有价值,所以很难接受只有一个答案;-)

php mysql logging append fwrite

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

在C中使用fwrite时,文件大小限制为2GB?

我有一个简短的C程序写入文件,直到磁盘上没有更多的空间:

#include <stdio.h>

int main(void) {
  char c[] = "abcdefghij";
  size_t rez;
  FILE *f = fopen("filldisk.dat", "wb");
  while (1) {
    rez = fwrite(c, 1, sizeof(c), f);
    if (!rez) break;
  }
  fclose(f);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行程序(在Linux中)时,它会在文件达到2GB时停止.

由于FILE结构,是否存在内部限制?

谢谢.

c filesystems fwrite fat32

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

为什么ostream :: write()在C++中需要'const char_type*'而不是'const void*'?

fwrite()C中的函数const void *restrict buffer用作第一个参数,因此您可以直接将指针struct作为第一个参数传递给您.
http://en.cppreference.com/w/c/io/fwrite
例如fwrite(&someStruct, sizeof(someStruct), 1, file);

但在C++中,ostream::write()需求const char_type*会迫使您使用reinterpret_cast.(在Visual Studio 2013中,它是const char*.)
http://en.cppreference.com/w/cpp/io/basic_ostream/write
egfile.write(reinterpret_cast<char*>(&someStruct), sizeof(someStruct));

几乎在所有情况下,要写入文件的二进制数据都不是char数组,那么为什么标准更喜欢看起来更复杂的样式呢?

PS
1.实际上我write()ofstreamwith ios::binary模式下使用了这个方法,但根据引用,它继承了ofstream.所以我ostream::write()在上面使用.
2.如果要打印字符流,可以使用operator<<().是不是write()为编写原始数据而设计的方法?
3.如果write()不是编写二进制数据的方法,那么在标准中执行此操作的方法是什么?(尽管由于不同平台上的各种内存对齐策略,这可能会影响代码的可移植性)

c++ file fwrite void ofstream

20
推荐指数
2
解决办法
2541
查看次数

fwrite"<?xml version"上的chokes

当字符串<?xml version通过fwrite写入文件时,后续的写入操作变慢.

这段代码:

#include <cstdio>
#include <ctime>
#include <iostream>

int main()
{
    const long index(15000000); 

    clock_t start_time(clock());
    FILE*  file_stream1 = fopen("test1.txt","wb");
    fwrite("<?xml version",1,13,file_stream1);
    for(auto i = 1;i < index ;++i)
        fwrite("only 6",1,6,file_stream1);
    fclose(file_stream1);

    std::cout << "\nOperation 1 took : " 
        << static_cast<double>(clock() - start_time)/CLOCKS_PER_SEC 
        << " seconds.";


    start_time = clock();
    FILE*  file_stream2 = fopen("test2.txt","wb");
    fwrite("<?xml versioX",1,13,file_stream2);
    for(auto i = 1;i < index ;++i)
        fwrite("only 6",1,6,file_stream2);
    fclose(file_stream2);

    std::cout << "\nOperation 2 took : " 
        << static_cast<double>(clock() - start_time)/CLOCKS_PER_SEC 
        << …
Run Code Online (Sandbox Code Playgroud)

c c++ xml fwrite visual-c++

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

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

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

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

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

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

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

php fopen fwrite fread

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

fwrite() - 大小和计数对性能的影响

关于fwrite()中两个参数'size'和'count'的目的似乎存在很多混淆.我想弄清哪个会更快 -

fwrite(source, 1, 50000, destination);
Run Code Online (Sandbox Code Playgroud)

要么

fwrite(source, 50000, 1, destination);
Run Code Online (Sandbox Code Playgroud)

这是我的代码中的一个重要决定,因为此命令将执行数百万次.

现在,我可以跳转到测试并使用可以提供更好结果的那个,但问题是该代码适用于多个平台.

所以,

  • 如何才能获得跨平台更好的答案?

  • fwrite()的实现逻辑会因平台而异吗?

我知道有类似的问题(什么是FREAD/FWRITE回吐大小的基本原理和计算作为参数?,FWRITE的性能和写入大小),但也明白,这是关于同一个问题不同的问题.在这种情况下,类似问题的答案是不够的.

c io performance fwrite

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

用PHP覆盖文件中的行

覆盖文件中特定行的最佳方法是什么?我基本上想要在文件中搜索字符串'@parsethis',并用其他内容覆盖该行的其余部分.

php file-io fopen fwrite

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