我曾经使用下面的代码将1D数组写入文件:
FILE *fp;
float floatValue[5] = { 1.1F, 2.2F, 3.3F, 4.4F, 5.5F };
int i;
if((fp=fopen("test", "wb"))==NULL) {
printf("Cannot open file.\n");
}
if(fwrite(floatValue, sizeof(float), 5, fp) != 5)
printf("File write error.");
fclose(fp);
/* read the values */
if((fp=fopen("test", "rb"))==NULL) {
printf("Cannot open file.\n");
}
if(fread(floatValue, sizeof(float), 5, fp) != 5) {
if(feof(fp))
printf("Premature end of file.");
else
printf("File read error.");
}
fclose(fp);
for(i=0; i<5; i++)
printf("%f ", floatValue[i]);
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我想写和读取2D数组?
我想写一个文本文件.当我在php中使用substr_replace时,编码会发生变化.它不能正确打印希腊字符.如果我不是一切都很好.有什么建议?
<?php
$file = "test.txt";
$writeFile = fopen($file, "w+");//read/write
$myarray = array("????","???????","?????");
$myarray[0] = substr_replace($myarray[0],"?", 0,1);
foreach ($myarray as $data){
fwrite($writeFile, $data."\n");
}
?>
Run Code Online (Sandbox Code Playgroud)
观察
εφδφ
δφδσφδσ
δφδφδ
没有
substr_replace的
结果
δφδφδφδσφδσδφδφδ
我有以下程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
typedef struct {int key; char data[MAXLEN];} record;
main(int argc, char *argv[])
{
int n, i;
record x;
FILE *fp;
fp = fopen(argv[1], "w+");
printf("How many records will be entered? \n");
scanf("%d", &n);
for (i=0; i<n; i++)
{
printf("Enter record: \n");
scanf("%d", &x.key);
scanf("%s", &x.data);
fwrite(&x, sizeof(record), 1, fp);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在做的是从用户输入创建记录,然后将这些"记录"存储到文件中.但是,当我使用fwrite()时,创建的文件中会写入许多奇怪的字符,而不是简单地让每条记录都包含其键和数据.有人能告诉我为什么写这些奇怪的人物吗?
这两个操作之间的基本区别是什么?
someReadStream.pipe(fs.createWriteStream('foo.png'));
Run Code Online (Sandbox Code Playgroud)
VS
someReadStream.on('data', function(chunk) { blob += chunk } );
someReadStream.on('end', function() { fs.writeFile('foo.png', blob) });
Run Code Online (Sandbox Code Playgroud)
当使用请求库进行抓取时,我可以保存图片(png,bmp)等...仅使用前一种方法,而后一种方法存在相同的gibbersh(二进制)数据,但图像不会渲染.
他们有什么不同?
我正在为一个类编写单元测试,需要生成一些具有不同mime类型的文件.
我知道如何在向远程用户(ala header())发送文件时设置mime类型,但fwrite()在本地服务器上使用时该怎么做?
对于在此方法中生成的文件是直接从文件扩展名派生的mime类型?
我在Ubuntu 12.04上使用PHP 5.3.x.
对于我网站的一部分,我需要能够使用php将php代码写入文件.例如:
$filename = "RtestR.php";
$ourFileName =$filename;
$ourFileHandle = fopen($ourFileName, 'w');
$written = "
<html>
<body>
<?php
echo \"I like the color \".$_SESSION['color'].\"!!!!\";
</body>
</html>
";
fwrite($ourFileHandle,$written);
fclose($ourFileHandle);
Run Code Online (Sandbox Code Playgroud)
但是,它不会创建文件,而是抛出此错误:
解析错误:语法错误,意外T_ENCAPSED_AND_WHITESPACE,期望第14行的T_STRING或T_VARIABLE或T_NUM_STRING
我做错了什么以及将PHP代码写入文件的正确方法是什么?
编辑:
我想我可能需要让自己更清楚...我希望在加载新创建的文件时确定SESSION.从技术上讲,我不想在这个页面上获得会话,而是在我创建的页面上!我想将代码写入文件,而不是代码的输出!
我正在制作一个Android应用程序,需要能够将文件推送到服务器上.
为此,我正在使用POST,fopen/fwrite但此方法仅附加到文件并unlink在写入文件之前使用无效.(file_put_contents具有完全相同的效果)
这就是我到目前为止所拥有的
<?php
$fileContent = $_POST['filecontent'];
$relativePath = "/DatabaseFiles/SavedToDoLists/".$_POST['filename'];
$savePath = $_SERVER["DOCUMENT_ROOT"].$relativePath;
unlink($savePath);
$file = fopen($savePath,"w");
fwrite($file,$fileContent);
fclose($file);
?>
Run Code Online (Sandbox Code Playgroud)
当我不尝试写入文件时,该文件将正确删除它自己,但如果我尝试写入它,它将附加.
有人有任何关于覆盖文件内容的建议吗?
谢谢,卢克.
在某些情况下,fwrite写入额外数据(比请求的字节多).简短演示的输出是最简单的解释方式.该演示尝试创建两个2048字节的文件,并在每次fwrite调用后检查偏移量,以确定写入的字节数.第一个fwrite调用写入两个额外的字节:
len: 2048
current offset = 0
wrote 1024 bytes
current offset = 1026
EXITING:
offset % BLOCKSIZE = 2
len: 2048
current offset = 0
wrote 1024 bytes
current offset = 1024
wrote 1024 bytes
SUCCESS
Run Code Online (Sandbox Code Playgroud)
当编译为ELF(unix二进制文件)时,程序成功运行(写入2048字节到两个文件),但在编译为PE(Windows二进制文件/可执行文件)时失败(如上所示).我尝试过编译和测试:
Ubuntu 14.04 and gcc 4.8.2 - SUCCESS
WINE 1.6.2 and mingw 4.8.2 - FAIL
Windows 7 and mingw 4.8.2 - FAIL
Windows 7 and Visual Studio 2013 - FAIL
Run Code Online (Sandbox Code Playgroud)
传递的缓冲区中的实际数据fwrite会影响写入的额外字节数,但实际上每次都会发生这种情况(除非您写入NULL字节).
main.c中:
#include <stdio.h>
#include …Run Code Online (Sandbox Code Playgroud) 假设我有以下代码:
fid = fopen(my_filename,'w','ieee-le','ISO-8859-1');
fwrite(fid,1,'short',10,'ieee-le')
Run Code Online (Sandbox Code Playgroud)
然后这将打开一个早期指定的文件,跳过前10个字节并将1写入以下两个.
但前十个字节会发生什么,假设打开的文件以前不存在?如果我要访问一个,我最终会得到什么?为什么?
php 中打开文件、读取内容并随后使用基于原始内容的一些输出覆盖文件内容的最干净方法是什么?具体来说,我试图打开一个填充有项目列表(以换行符分隔)的文件,处理/添加项目到列表中,从列表中删除最旧的 N 个条目,最后将列表写回到文件中。
fopen(<path>, 'a+')
flock(<handle>, LOCK_EX)
fread(<handle>, filesize(<path>))
// process contents and remove old entries
fwrite(<handle>, <contents>)
flock(<handle>, LOCK_UN)
fclose(<handle>)
Run Code Online (Sandbox Code Playgroud)
请注意,我需要使用集群()锁定文件,以便跨多个页面请求保护它。fopen() 时的“w+”标志会起作用吗?php 手册指出它将把文件截断为零长度,所以看起来这可能会阻止我读取文件的当前内容。