我有一个包含字符串的结构.像这样的东西:
struct Chunk {
int a;
string b;
int c;
};
所以,我想,我不能使用fread和fwrite函数从文件中读写这个结构.因为字符串可能会保留不同的内存容 但这样的代码工作正常.
Chunk var;
fwrite(&var, sizeof(Chunk), 1, file);
fread(&var, sizeof(Chunk), 1, file);
它真的有些问题吗?
假设我有一个中等大小的文本文件(~850kb,10,000+ 行)
我想替换分布在文件中的特定行(或几行)。
当前执行此操作的方法包括重写整个文件。我当前使用的方法是逐行读取整个文件,写入 .tmp 文件,完成后,我将 tmp 文件 rename() 为原始源文件。
它有效,但速度很慢。当然,随着文件的增长,执行时间也会增加。
是否有另一种方法(使用 PHP)来完成工作,而不必每次需要替换或删除一两行时都重写整个文件?
谢谢!我环顾四周,在stackoverflow上找不到答案。
嗨,我使用此代码读取和写入文件中的文本.
$d = fopen("chat.txt", "r");
$content=fread($d,filesize('chat.txt'));
$bn=explode('||',$content);
foreach($bn as $bn)
echo $bn.'<br>';
Run Code Online (Sandbox Code Playgroud)
和
$d = fopen("chat.txt", "a");
$c=$_GET['c'];
if($c=='') die();
fwrite($d,$c.'||');
fclose($d);
Run Code Online (Sandbox Code Playgroud)
但是= =只有= utf-8字符显示"?" 要么 "[]" .我的编码Utf-8没有BOM,我使用它
header('Content-type: text/html; charset=UTF-8');
Run Code Online (Sandbox Code Playgroud)
还有这个 :
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)
我在php.ini中的defult编码是utf-8但是还显示?.我在文件中看到chat.txt文件和字符,但是在文件中保存时和在页面中显示"?"时 而不是正确的.
有没有一种方法可以防止 fwrite 阻塞,比如使用超时?
场景是这样的:我需要在网络上进行 fwrite 调用(因为我主要是重用代码,所以我需要坚持下去)。但是,如果我拔掉网线,fwrite 会阻塞。有解决方法吗?任何帮助/建议将不胜感激。
我试过这个,但不会工作
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Mickey Mouse\n";
fwrite($myfile, $txt);
$txt = "Minnie Mouse\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
Run Code Online (Sandbox Code Playgroud)
这是它在我的 newfile.txt 中的显示方式:
Mickey MouseMinnie Mouse`
Run Code Online (Sandbox Code Playgroud)
但我想要这样:
Mickey Mouse
Minnie Mouse
Run Code Online (Sandbox Code Playgroud) 我正在尝试将结构写入tempGroupFileinto GroupFile。fwrite()写入时返回1,但实际上文件中没有写入任何数据GroupFile。函数printRec()在屏幕上打印出结构。data是结构变量。这些操作后文件GroupFile为空。代码:
GWTemp = fopen(tempGroupFile, "rb");
GW = fopen(GroupFile, "wb");
if((GW == NULL) || (GWTemp == NULL))
{
puts("Failed to open file.");
fflush(stdin);
getchar();
return 0;
}
while(fread(&data, sizeof data, 1, GWTemp))
{
if(fwrite(&data, sizeof data, 1, GW))
{
printRec(data);
}
}
Run Code Online (Sandbox Code Playgroud) 如何在不删除文件的所有其他内容的情况下在 php 中向文件中写入新行?
<?php
if(isset($_POST['songName'])){
$newLine = "\n";
$songName = $_POST['songName'];
$filename = fopen('song_name.txt', "wb");
fwrite($filename, $songName.$newLine);
fclose($filename);
};
?>
Run Code Online (Sandbox Code Playgroud)
这是文件的样子 当前视图
这就是理想视图的样子
将一些文本后跟数据框写入文件的最佳方法是什么?文本是通过将变量粘贴到字符串中来创建的。
示例所需的输出:
Here is some text.
This line has a variable: Hello World
Data frame below the line
=================
ID,val1,val2
1,2,3
2,4,6
3,6,9
4,8,12
5,10,15
6,12,18
7,14,21
8,16,24
9,18,27
10,20,30
Run Code Online (Sandbox Code Playgroud)
我可以用初始文本创建一个字符串:
myvar <- "Hello World"
out_string <- paste0("Here is some text.\n",
"This line has a variable: ", myvar, "\n",
"Data frame below the line\n",
"=================\n")
cat(out_string)
Run Code Online (Sandbox Code Playgroud)
我可以将数据帧写入文件:
library(data.table)
mydf <- data.frame(ID = 1:10, val1 = 1:10*2, val2 = 1:10*3)
fwrite(x = mydf,
file = "path/file.txt",
sep = ",",
col.names=T)
Run Code Online (Sandbox Code Playgroud)
但我不确定如何最好地将这两者结合起来。 …
我想通过 python 脚本自动替换很多无聊的 C# 代码。我读取文件的所有行,转换它们,截断整个文件,写入新字符串并关闭它。
f = open(file, 'r+')
text = f.readlines()
# some changes
f.truncate(0)
for line in text:
f.write(line)
f.close()
Run Code Online (Sandbox Code Playgroud)
我所有的修改都写下来了。但文件开头出现了一些奇怪的字符。我不知道如何避免它们。即使我打开encoding='utf-8-sig'它也没有帮助。
我尝试截断除第一行之外的整个文件,如下所示:
import sys
f.truncate(sys.getsizeof(text[0]))
for index in range(1, len(text), 1):
f.write(text[index])
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,不止第一行正在写入,而不仅仅是第一行。
编辑 我尝试过这个:
f.truncate(len(text[0]))
for index in range(1, len(text), 1):
f.write(text[index])
Run Code Online (Sandbox Code Playgroud)
第一行写的是正确的,但下一行有同样的问题。所以我认为这些字符来自文件末尾,我尝试在它们后面写入。
Windows 上的 GCC
#include <stdio.h>
#include <stdlib.h>
struct test {
int n1;
int n2;
};
int main() {
FILE *f;
f = fopen("test.dat", "w");
struct test test1 = {10, 10};
fwrite(&test1, sizeof(struct test), 1, f);
fclose(f);
struct test test2;
f = fopen("test.dat", "r");
while(fread(&test2, sizeof(struct test), 1, f))
printf("n1=%d n2=%d\n", test2.n1, test2.n2);
fclose(f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我将 test1 设置为,10,10则 fwrite 会将10 个字节写入文件:0D 0A 00 00 00 0D 0A 00 00 00
(每个4字节int将在其前面填充0D回车符)
如果我将 test1 设置为, …