C#,我可以将文件从流或其他文件保存到我的单个 exe 中吗?

Posted

技术标签:

【中文标题】C#,我可以将文件从流或其他文件保存到我的单个 exe 中吗?【英文标题】:C#, can I save a file from a stream or other to my single exe? 【发布时间】:2022-01-10 07:52:17 【问题描述】:

我想获取一个序列化文件并将其保存到项目中的资源文件夹中。

我这样做的原因(也许有更好的方法)是我为运行的程序有一个已发布的 exe(单个可执行文件),当它创建一个序列化文件时,我不希望它把它保存到桌面。我需要以某种方式将其保存到我的 exe 中,而不需要超出它。

关于如何做到这一点的任何建议?

【问题讨论】:

推荐为应用程序保存“数据”的位置是 AppData 位置:docs.microsoft.com/en-us/windows/apps/design/app-settings/… ....docs.microsoft.com/en-us/dotnet/api/… 如果您希望设置/数据在其他地方登录时与用户一起漫游,则:docs.microsoft.com/en-us/dotnet/api/… ... 或...如果所有用户共享其数据...docs.microsoft.com/en-us/dotnet/api/… 将其保存到 App Data 文件夹之一。如果您希望它几乎无法被发现,请将其保存到 隔离存储 @CSmith 谢谢这是个好建议 @Flydog57 也很棒,谢谢;我还没有听说过隔离存储文件夹。我可能需要调查一下。 ig 我也可以在 appdata 文件夹中创建一个隐藏目录。我只是希望我不需要管理员权限来访问 appdata 文件夹。 【参考方案1】:

这很丑.....但是您可以在 NTFS 系统上使用“替代数据流”。

http://ntfs.com/ntfs-multiple.htm

https://docs.microsoft.com/en-us/sysinternals/downloads/streams

How to read and modify NTFS Alternate Data Streams using .NET

https://blogs.msmvps.com/bsonnino/2016/11/24/alternate-data-streams-in-c/

https://oddvar.moe/2018/04/11/putting-data-in-alternate-data-streams-and-how-to-execute-it-part-2/

https://blog.foldersecurityviewer.com/ntfs-alternate-data-streams-the-good-and-the-bad/

https://www.irongeek.com/i.php?page=security/altds

您可能会有安全扫描程序阻止您这样做。

此外,如果您从 NTFS 卷复制到 FAT,则替代数据流将丢失。

还有一些备份软件可能无法正确备份 ADS。

https://wiki.sep.de/wiki/index.php/Support_for_NTFS_alternate_data_streams_(ADS)_for_Windows

https://www.2brightsparks.com/resources/articles/ntfs-alternate-data-stream-ads.html

https://community.osr.com/discussion/89308/alternate-data-streams-and-backups

https://social.technet.microsoft.com/Forums/Azure/en-US/007d5442-1cd8-4293-b717-b8fa72606189/ntfs-data-streams-broken-by-design-on-file-copy?forum=winserverfiles

【讨论】:

谢谢,但如果没有简单的方法,我可能只是将它们存储在计算机上

以上是关于C#,我可以将文件从流或其他文件保存到我的单个 exe 中吗?的主要内容,如果未能解决你的问题,请参考以下文章

C# - 从流中序列化/反序列化 DES 加密文件

“无法打开流或文件“laravel.log”:无法打开流:权限被拒绝”

从流创建虚拟文件路径

如何将 Visual Studio 中的 C# 项目保存到单个 .cs 文件而不是整个项目文件夹中?

我需要帮助创建一个按钮,用于保存用户当前位置,如果他们移动,则需要多个其他位置,以便我可以通过CSV文件导出这些位置

如何从/向流写入/读取位? (C#)