Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在rust 1.26及以后的版本中,如何将多个字符串写入一个文件,而不使它们相互覆盖?_Rust - Fatal编程技术网

在rust 1.26及以后的版本中,如何将多个字符串写入一个文件,而不使它们相互覆盖?

在rust 1.26及以后的版本中,如何将多个字符串写入一个文件,而不使它们相互覆盖?,rust,Rust,我在将一些字符串写入.txt文件时遇到了问题,因为它们无法相互覆盖 这是一个例子: for i in 1..100{ fs::write("*PATH*", i.to_string()).expect("Unable to write file"); } 我在想它应该把每一首歌都写得一首接一首,但事实并非如此!它会覆盖,当我打开文档时,它只是最后写入的数字 我在网上找不到任何东西,因为这种写入文件的方式似乎很新。您可以在进入循环之前打开

我在将一些字符串写入.txt文件时遇到了问题,因为它们无法相互覆盖

这是一个例子:

for i in 1..100{

        fs::write("*PATH*", i.to_string()).expect("Unable to write file");
}
我在想它应该把每一首歌都写得一首接一首,但事实并非如此!它会覆盖,当我打开文档时,它只是最后写入的数字

我在网上找不到任何东西,因为这种写入文件的方式似乎很新。

您可以在进入循环之前打开。通过使用和宏,可以进一步简化对文件的写入。这使您可以利用Rust避免显式执行
i.to_string()

因为你正在执行很多(小)的写,然后考虑把它封装在A中,以最小化执行的总系统调用的数量。< /P>

使用std::fs::File;
使用std::io::{BufWriter,Write};
fn main(){
让path=“…”;
设f=File::create(path).expect(“无法创建文件”);
设mut f=BufWriter::new(f);
因为我在1..100{
写!(f,“{}”,i).expect(“无法写”);
}
}
如果文件已经存在,并且您希望在每次执行程序时连续附加到该文件。然后,您可以使用打开它,特别是使用以下命令启用附加模式:

使用std::fs::OpenOptions;
使用std::io::{BufWriter,Write};
fn main(){
让path=“…”;
设f=OpenOptions::new()
.写(真)
.append(true)
.open(路径)
.expect(“无法打开文件”);
设mut f=BufWriter::new(f);
因为我在1..100{
写!(f,“{}”,i).expect(“无法写”);
}
}
您可以在进入循环之前打开。通过使用和宏,可以进一步简化对文件的写入。这使您可以利用Rust避免显式执行
i.to_string()

因为你正在执行很多(小)的写,然后考虑把它封装在A中,以最小化执行的总系统调用的数量。< /P>

使用std::fs::File;
使用std::io::{BufWriter,Write};
fn main(){
让path=“…”;
设f=File::create(path).expect(“无法创建文件”);
设mut f=BufWriter::new(f);
因为我在1..100{
写!(f,“{}”,i).expect(“无法写”);
}
}
如果文件已经存在,并且您希望在每次执行程序时连续附加到该文件。然后,您可以使用打开它,特别是使用以下命令启用附加模式:

使用std::fs::OpenOptions;
使用std::io::{BufWriter,Write};
fn main(){
让path=“…”;
设f=OpenOptions::new()
.写(真)
.append(true)
.open(路径)
.expect(“无法打开文件”);
设mut f=BufWriter::new(f);
因为我在1..100{
写!(f,“{}”,i).expect(“无法写”);
}
}
我在网上找不到任何东西,因为这种写入文件的方式似乎很新

它不是很新,它是相当错误的(对于这个用例)。提前打开文件并写入该文件,使其附加,而不是调用每个循环,这将在每次迭代时重新打开和关闭文件,这不仅速度慢,而且会导致文件被覆盖:

使用std::fs::OpenOptions;
使用std::io::prelude::*;
让file=OpenOptions::new()
.写(真)
.open(“/path/to/file”)
.expect(“无法打开文件”);
因为我在1..100{
file.write_all(i.to_string().as_bytes()).expect(“无法写入文件”);
}
我在网上找不到任何东西,因为这种写入文件的方式似乎很新

它不是很新,它是相当错误的(对于这个用例)。提前打开文件并写入该文件,使其附加,而不是调用每个循环,这将在每次迭代时重新打开和关闭文件,这不仅速度慢,而且会导致文件被覆盖:

使用std::fs::OpenOptions;
使用std::io::prelude::*;
让file=OpenOptions::new()
.写(真)
.open(“/path/to/file”)
.expect(“无法打开文件”);
因为我在1..100{
file.write_all(i.to_string().as_bytes()).expect(“无法写入文件”);
}

在写入文件之前追加所有字符串。在写入文件之前追加所有字符串。是的,你说得对。我删除了最后一个
BufWriter
示例,并将其添加到其他两个示例中:)是的,你说得对。我删除了最后的
BufWriter
示例,并将其添加到其他两个示例中:)