gpt4 book ai didi

c# - 为什么会出现这些 nul

转载 作者:太空宇宙 更新时间:2023-11-03 21:11:38 24 4
gpt4 key购买 nike

我曾经使用以下函数写入很多不同的文件

using (FileStream fs = new FileStream(Settings.PsLog, FileMode.Truncate, System.Security.AccessControl.FileSystemRights.Write, FileShare.ReadWrite, 1024, FileOptions.None, null))
{
foreach (string line in checkList)
{
byte[] encodedText = Encoding.Unicode.GetBytes(line + Environment.NewLine);
await fs.WriteAsync(encodedText, 0, line.Length);
}
}

由于这段代码是复制粘贴的,所以我决定将其提取为一个更通用的函数。

private static async Task WriteTextAsync(string filePath, string text)  
{
byte[] encodedText = Encoding.Unicode.GetBytes(text + Environment.NewLine);
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Append, FileAccess.Write, FileShare.Write,
bufferSize: 1024, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
};
}

但是在使用提取的版本后,随机的 NUL 被附加到文本中

enter image description here

这些空值是从哪里来的?我也尝试复制 filestream() 设置 1 对 1,但即使这样 NUL 也发生了。

最佳答案

您的原始代码已损坏。

Encoding.Unicode使用,line.LengthencodedText.Length 不同.当您尝试写入数据时,您只写入了大约一半(平均)。

由于在您的示例中实际上并没有发生这种情况,最可能的原因是您实际上没有使用 Encoding.Unicode , 而不是 Encoding.UTF8或单字节 ANSI/ASCII 编码之一。

无论哪种情况,请确保您写入的字节数与要写入的字节数一样多。字符数无关紧要。并确保使用正确的编码 - 只能有一个。

作为旁注,您的代码也将比原始代码慢得多。这很可能是一个糟糕的权衡。相反,您可能想要捕获整个 foreach , 并传递 IEnumerable<string>而不仅仅是 string .如果在某些情况下你真的只需要写一个字符串,你可以提供一个 params string过载或任何最适合你的。并确保所有情况实际上都是等价的 - 这个肯定不是,因为原始文件在原始代码中被丢弃,而它只被附加到您的代码中。

关于c# - 为什么会出现这些 nul,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37232350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com