.NET把文件嵌入到程序集中的EmbeddedFile

简介

有时候我们在发布程序时,不想让客户看到项目中的文件,这时就可以使用.NET的嵌入文件功能(虚拟文件)。在.NET中,虚拟文件(Virtual File)是一种特殊类型的文件,它们在编译时被嵌入到程序集中,而不是作为独立的文件存在于文件系统中。EmbeddedFile是指在编译时将文件内容嵌入到程序集中,并通过虚拟路径来访问的文件。

使用步骤:

1、嵌入的文件配置

首先将要嵌入的文件添加到项目中,我们在vs项目中新建一个名为"dotnet"的文本文件,并右键属性设置其生成操作为 “嵌入的资源”。设置完成右键选择项目 “属性”,然后在属性窗口中 “生成” 选项来完成嵌入。如下图:

图片

生成后的文件夹是没有这个文件,如下图

图片

2、文件说明

在代码中可以使用虚拟路径来访问嵌入的文件。虚拟路径是指通过程序集的命名空间和文件名来构建的路径。例如,如果嵌入的文件名为 “dotnet.txt”,它位于命名空间为 “Test7” 的程序集中,那么虚拟路径就是 “Test7.dotnet.txt”。

3、用C#代码读取嵌入文件

参考代码如下:

using System;
using System.IO;
using System.Reflection;
using System.Text;

namespace Test7
{
    class Program
    {
        static void Main(string[] args)
        {
            string embeddedFilePath = "Test7.dotnet.txt";
            string fileContent = ReadEmbeddedFile(embeddedFilePath);
            Console.WriteLine(fileContent);
        }
        static string ReadEmbeddedFile(string embeddedFilePath)
        {
            Assembly assembly = Assembly.GetExecutingAssembly();
            //如果跨程序访问或者不确定文件,这里可以判断文件流是否为null
            using (Stream stream = assembly.GetManifestResourceStream(embeddedFilePath))
            {
                if (stream == null)
                {
                    throw new Exception("Embedded文件未发现: " + embeddedFilePath);
                }
                using (StreamReader reader = new StreamReader(stream))
                {
                    return reader.ReadToEnd();
                }
            }
        }
    }
}

在上面的示例中,`ReadEmbeddedFile` 方法通过虚拟路径获取嵌入的文件流,并使用 `StreamReader` 读取文件内容。然后,将文件内容打印到控制台。

图片

注意:虚拟文件的路径是区分大小写的,并且要正确地指定命名空间和文件名。此外,如果文件位于不同的程序集中,你需要使用正确的程序集名称来构建虚拟路径。

结语

本文讲述了在 .NET Core 中使用虚拟文件(EmbeddedFile)的基本方法。当然你也可以将任意类型的文件(例如文本文件、图像文件等)嵌入到程序集中,并以使用上面的方式指定虚拟路径的方式访问它们。它的好处是嵌入方便发布程序,尤其是winform桌面类别的程序。希望本文对你有所收获,欢迎留言或者吐槽!

参考:

1、learn.microsoft.com/zh-cn/dotnet/core/extensions/resources

2、chatgpt

来源公众号:DotNet开发跳槽
PDF 文件是一种特殊的文件格式,它可以包含多种类型的文件,包括嵌入文件嵌入文件通常是通过一些特殊的对象来表示的,例如 PDF 中的文件附件(File Attachment)对象。而 XML 文件可以作为一种嵌入文件,被包含在 PDF 文件中。 在 PDF 文件中,可以使用以下步骤将 XML 文件作为嵌入文件进行添加: 1. 创建一个新的 PDF 文档对象 `document`。 2. 创建一个新的页面对象 `page`。 3. 创建一个新的文件附件对象 `attachment`,并指定文件名和文件内容。可以使用 `PDEmbeddedFile` 类来表示嵌入文件。 4. 将文件附件对象 `attachment` 添加到名称字典(Name Dictionary)中。名称字典是一个键值对的合,用于存储 PDF 文件中的各种对象。 5. 将名称字典添加到页面对象 `page` 中。 6. 将页面对象 `page` 添加到 PDF 文档对象 `document` 中。 7. 保存 PDF 文档对象 `document` 到磁盘文件中。 下面是一个示例代码,演示了如何将 XML 文件作为嵌入文件添加到 PDF 文件中: ``` java PDDocument document = new PDDocument(); PDPage page = new PDPage(); document.addPage(page); PDEmbeddedFile embeddedFile = new PDEmbeddedFile(document, new FileInputStream("path/to/xml/file.xml")); PDComplexFileSpecification fileSpec = new PDComplexFileSpecification(); fileSpec.setEmbeddedFile(embeddedFile); fileSpec.setFile("file.xml"); PDDocumentNameDictionary documentNameDictionary = new PDDocumentNameDictionary(document.getDocumentCatalog()); PDEmbeddedFilesNameTreeNode embeddedFiles = new PDEmbeddedFilesNameTreeNode(); embeddedFiles.setNames(Collections.singletonMap("file.xml", fileSpec)); documentNameDictionary.setEmbeddedFiles(embeddedFiles); page.getCOSObject().setItem(COSName.ANNOTS, new COSArray()); document.save("path/to/output.pdf"); document.close(); ``` 通过以上代码,你可以将 XML 文件作为嵌入文件添加到 PDF 文件中,并保存为新的 PDF 文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值