问题标签 [writeallbytes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 字节数组到pdf
我正在尝试将存储在 sql 列中的文件的内容转换为 pdf。
我使用以下代码:
从某种意义上说,生成的 pdf 已损坏,因为当我在 notepad++ 中打开 pdf 时,我看到了一些垃圾标题(无论文件内容如何,它都是相同的)。垃圾标题是 NUL SOH NUL NUL NUL ....
c# - Xamarin File.WriteAllBytes 方法不写入数据
这是我的代码:
该方法不返回异常,但文件未写入。我正在尝试在 Android API 28 上执行此操作
c# - 从 C#/.NET 正确编辑文本或源文件
从代码编辑文本或源文件的典型方法是使用 File.ReadAllLines 或 File.ReadAllText 读取文件,进行更改,然后使用 WriteAllLines 或 WriteAllText 将其写出。
但是,如果您要在 Visual Studio 或 Notepad++ 中打开文本文件(比如一些源代码文件),向下滚动几行,进行更改并保存,会处理更多内容。
似乎至少在 Windows 上处理的是一组复杂的规则和启发式方法,至少考虑到:
- 文本文件的推断编码。
- 行尾
- 最后一行是否为“不完整行”(如 diffutils/manual 中所述,即没有行尾字符的行)
我将部分讨论这些只是为了说明复杂性。我的问题是,是否有一套完整的启发式方法、可以使用的已经建立的算法或封装它的现有组件。
推断编码
最常见的源/文本文件:
- 带有 BOM 的 UTF-16
- 带有 BOM 的 UTF-8
- 无 BOM 的 UTF-8
当没有 BOM 时,使用一些启发式方法推断编码。它可能是 ASCII 或 Windows1252 (Encoding.GetEncoding(1252)),或 BOMless UTF-8 这取决于其余数据的样子。如果有一些已知的上 ascii 或可能看起来 UTF-8 的东西。
保存时,需要保持相同的编码。
行尾
您必须保持相同的行尾。因此,如果文件使用 CR/LF,则将其保留在 CR/LF。但是当它只是LF时,请保留它。但它可能会变得更复杂,因为给定的文本文件可能两者都有,并且还需要维护它。例如,一个 CR/LF 的源文件可能在其中有一个只有 LF 行结束的部分。当有人将文本从另一个工具粘贴到文字多行字符串(例如 C# 的 @"" 字符串时,就会发生这种情况。Visual Studio 可以正确处理这个问题。
不完整的行
如果最后一行不完整,则也必须保留。这意味着,如果最后一行不以行尾字符结尾
可能的方法
我认为从一开始就解决所有这些问题的一种方法是将文件视为二进制而不是文本。这意味着无法使用 .NET 中的正常文本文件处理。将需要一组新的 API 来处理编辑此类文件。
我可以对一个组件进行映像,该组件需要您将文件作为内存流打开并将其传递给组件。然后组件可以读取流并向客户端提供面向行的视图,以便客户端代码可以遍历行进行处理。通过迭代的每个元素都将是一个看起来像这样的类型的对象:
以 Windows 上的普通文本文件为例:
- originalLineNumber 将为 1
- 行将是一个包含文件第一行的一维数组,没有行尾
- lineEndings[0] 将是“\x0D\x0A”
该lines
字段可以修改。可以替换为空数组来删除行,也可以替换为多元素数组来插入行(替换现有行)
lineEndings
数组处理类似。
在许多情况下,不会删除或插入新行,在这种情况下,应用程序代码根本不需要处理行尾。它们只是对 lines[] 数组进行操作,而忽略 lineEndings[] 数组。
我愿意接受其他建议。
c# - System.UnauthorizedAccessException Message=对路径“/C:\Users\user\Desktop\C\dok.txt”的访问被拒绝
我正在尝试从 C# xamarin 应用程序将数据导出到 PC 本地驱动器。即使作为管理员,我也遇到与标题相同的问题,无论文件是否存在......下面的代码,x,y 是 List :
c# - 如何使用 C# 的 File.WriteAllBytes() 在已安装的驱动器上写入?
我喜欢用它System.IO.File.WriteAllBytes()
来保持简单。但似乎,这种方法不能到处使用。在我的本地系统上写它工作正常。
但是,当我System.IO.File.WriteAllBytes()
在 Windows 共享上写入时,它会生成一个空文件并失败并出现异常:
如果我查看https://github.com/dotnet/runtime/blob/c72b54243ade2e1118ab24476220a2eba6057466/src/libraries/System.IO.FileSystem/src/System/IO/File.cs#L421的源代码, 我发现以下代码有效在引擎盖下:
如果我更改代码并使用它FileShare.None
来代替FileShare.Read
它。所以我有一个解决方法,我必须记住它System.IO.File.WriteAllBytes()
不防水(对吗?)。
不幸的是,我的分析以一些相关的问题告终:
那么,如果目标路径是可配置的,那么最佳实践是什么?开发人员必须避免 System.IO.File.WriteAllBytes() 还是系统管理员必须找到另一种方式来挂载共享?FileShare.Read 有什么问题?Windows 是否在 System.IO.File.WriteAllBytes() 正在写入时共享更改权限/锁定?是否有一些安装 Windows 共享的提示?
更新 1
写入所有字节():
使用 C# 创建和移动
ls:
山 ...
c# - Pdf 导出已损坏
我正在尝试导出 pdf/dox 文档。我有 byte[] 数组,我尝试了我在互联网上找到的这 2 个变体:
这些都不起作用,而且它们都在创建损坏的 PDF。
c# - 当我的用户帐户可以创建文件时,为什么在将文件写入网络路径时出现访问被拒绝
在 Visual Studio 中运行此代码时,我得到拒绝访问。
但是,如果我使用文件资源管理器导航到网络路径,我可以右键单击并使用运行 Visual Studio 2019 和上述代码的相同用户帐户创建文件和文件夹。