我的项目设置为.NET Framework 4.0.当我添加时System.IO.Packaging,它表示它不存在.当我尝试将其添加为项目的引用时,它也不会显示.
如何添加System.IO.Packaging到我的C#项目?
我有一堆ZIP文件,迫切需要一些分层重组和提取.目前我能做的是创建目录结构并将zip文件移动到正确的位置.我缺少的神秘奶酪是从ZIP档案中提取文件的部分.
我已经在ZipArchive课堂上看过MSDN文章并且理解它们很合理.我也看过VBScript的提取方法.这不是一个复杂的类,因此提取东西应该非常简单.事实上,它"主要"起作用.我已将下面的当前代码包含在内以供参考.
using (ZipPackage package = (ZipPackage)Package.Open(@"..\..\test.zip", FileMode.Open, FileAccess.Read))
{
PackagePartCollection packageParts = package.GetParts();
foreach (PackageRelationship relation in packageParts)
{
//Do Stuff but never gets here since packageParts is empty.
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题似乎存在于某个地方GetParts(或者就任何事情而言).看来打开的包是空的.深入挖掘调试器显示私有成员_zipArchive显示它实际上有部分.具有正确名称和一切的零件.为什么GetParts函数不能检索它们?我试过向ZipArchive开放,但没有帮助.哎呀.
我需要创建一个包含服务器上存在的文档的zip文件.我正在使用.Net Package类来创建一个新的Package(这是一个zip文件)我必须有一个物理文件或流的路径.我试图不创建一个可能是zip文件的实际文件,而只是创建一个存在于内存或其他东西的流.
我的问题是如何在没有物理文件实例化的情况下实例化新的Stream(即FileStream,MemoryStream等).
有没有人看过关于Open Packaging Conventions和System.IO.Packaging名称空间的好教程?
我有一些领域,我认为这项技术可能有用,但我很紧张,因为我不太了解它,我坚持一些术语.
我们在 ASP.NET 应用程序中调用 System.IO.Packaging.Package.Open()。此外,在调用它之前已经执行了 Windows 模拟,因为要打开的包存储在安全位置并且需要模拟才能读取它。
问题是Package.Open()调用 EventTrace.EasyTraceEvent(),后者又调用MS.Utility.EventTrace.IsClassicETWRegistryEnabled(),这会引发不允许请求的注册表访问的安全异常。
即使在 Web.config 中明确禁用,也会发生这种情况。在调试和发布模式下。
因此我的困境。模拟是必需的,因为文件(包)被存储为只能由被模拟的帐户访问。将其复制到不安全的位置会破坏安全性的目的。
授予模拟帐户访问注册表的权限会打开另一个方向的安全漏洞。除了一组特定的文件和文件夹之外,此帐户没有也不需要任何其他系统资源的访问权限。
我真正想要的是 EventTrace 从悬崖上飞跃,但我不知道如何告诉它这样做。
有任何想法吗?
我对在IIS服务器上使用隔离存储感到有点困惑.
我理解隔离存储的目标:提供一个存储数据的安全位置,而不用担心这个地方的方式和位置.
由于隔离存储具有按用户和按组件方法,因此在应用程序几乎具有自己身份的IIS服务器上使用它并不太疯狂.我还没有真正看到模仿Web应用程序的兴趣,而且我自己几乎从未见过模拟的Web应用程序,但这是我的观点.
在服务器上使用独立存储意味着(对于Windows Server 2003):
使用隔离存储 \Documents and Settings\<user>\
这意味着\Documents and Settings\Default User\当应用程序池是由拥有本地系统或网络服务我猜
这也意味着对本地系统或网络服务的此文件夹具有写权限
使用模仿
关于Web应用程序(逻辑),这些想法让我感到困惑......文档和设置?默认用户?是否只为存储启用模拟?无法控制服务器上的存储?呃?
MSDN上的一些要点:
服务器存储.服务器应用程序可以使用独立存储来提供单独的存储[...].由于隔离存储始终由用户隔离,因此服务器必须模拟发出请求的用户.[...]
使用独立存储使部分受信任的应用程序能够以计算机安全策略控制的方式存储数据.
默认情况下,从本地计算机(本地网络)运行的代码被授予使用独立存储的权利.我应该了解网络服务吗?我会感到惊讶.在我的IIS服务器(Windows 2003)上并非如此.
然后我是一个困境的前沿:System.IO.Packaging在Web应用程序中使用(内置隔离存储)或找到替代方案?使用IO.Packaging意味着您必须启用隔离存储?
我的方法错了吗?我错过了什么 ?
我确切地说我并不特别想在IIS服务器上使用/启用它,我想了解如果在这样的环境中启用它是一个很好的做法.
任何观点都值得赞赏,并且有关"使用IIS哲学的独立存储"的解释可能是一个问题.
谢谢 !
我试图在服务器上动态创建zip文件,其中包括来自在线服务的照片.但是当我尝试打开文件时,WinRar sais文件格式未知或已损坏.
这是代码:
MemoryStream stream = new MemoryStream();
Package package = ZipPackage.Open(stream, FileMode.Create, FileAccess.ReadWrite);
foreach (Order o in orders)
{
o.GetImages();
Parallel.ForEach(o.Images, (Dictionary<string, object> image) =>
{
string imageId = (string)image["ID"];
int orderId = (int)image["OrderId"];
string fileName = (string)image["FileName"];
string url = (string)image["URL"];
if (string.IsNullOrEmpty(fileName))
{
System.Net.WebClient wc = new System.Net.WebClient();
byte[] data = wc.DownloadData(url);
MemoryStream ms = new MemoryStream(data);
ms.Write(data, 0, data.Length);
string ext;
switch(wc.ResponseHeaders["Content-Type"])
{
case "image/jpeg":
case "image/jpg":
ext = "jpg";
break;
case "image/png":
ext = "png"; …Run Code Online (Sandbox Code Playgroud) 我正在使用System.IO.Packaing.Package类压缩文件。可以同时运行我的应用程序的多个实例,同时读取和保存文件。当处理小文件时,一切似乎都很好,但是如果涉及到大文件,如果应用程序的两个实例同时保存,我将收到一条消息,提示存储必须为此操作打开,并显示如下堆栈跟踪。
据我了解,使用小于10mb的文件包时,数据存储在某些内存流中,但是当内部大于10mb时,它将切换到IsolatedStorage。考虑到这一点,我能够找到即使这些实例正在运行,它们都可以解决相同的隔离存储位置,而且我相信这就是问题所在。我能够找到一种破解方法来强制每个实例解决使用以下代码将其定位到其他位置:
var rootDirUserField= typeof(IsolatedStorageFile).GetField("s_RootDirUser", BindingFlags.NonPublic | BindingFlags.Static);
rootDirUserField.SetValue(null, "<unique location in isolated storage>");
Run Code Online (Sandbox Code Playgroud)
即使这使问题消失了,我一点也不喜欢它。请帮助弄清楚如何优雅地解决此问题。在进一步的研究中,我发现IsolatedStorage甚至不打算与多个线程一起使用,这使我想知道为什么在处理Packages时它是一种选择。
at System.IO.IsolatedStorage.IsolatedStorageFileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, IsolatedStorageFile isf)
at MS.Internal.IO.Packaging.PackagingUtilities.SafeIsolatedStorageFileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, ReliableIsolatedStorageFileFolder folder)
at MS.Internal.IO.Packaging.PackagingUtilities.CreateUserScopedIsolatedStorageFileStreamWithRandomName(Int32 retryCount, String& fileName)
at MS.Internal.IO.Packaging.SparseMemoryStream.EnsureIsolatedStoreStream()
at MS.Internal.IO.Packaging.SparseMemoryStream.SwitchModeIfNecessary()
at MS.Internal.IO.Packaging.SparseMemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at MS.Internal.IO.Zip.ZipIOFileItemStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at MS.Internal.IO.Zip.ProgressiveCrcCalculatingStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at MS.Internal.IO.Zip.ZipIOModeEnforcingStream.Write(Byte[] buffer, Int32 offset, Int32 count)
Run Code Online (Sandbox Code Playgroud)
更新:
另外,可能会遇到问题,因为要访问IsolatedStorage,您的代码必须具有所有必要的本机平台操作系统权限,否则,将无法创建IsolatedStorage流。
更新2
已发布Windows …
对我正在编写的系统的要求意味着我需要确定可能使用多种不同压缩/存档技术中的任何一种创建的文件/包的内容 - zip,gzip,rar,tar.这些文件将位于可以运行Windows或Unix/Linux的任何变体的远程系统上,并且可以使用任何压缩/存档技术创建文件(我将建立一个可管理的列表来支持).
System.IO.Packaging处理什么格式 - 只是拉链?
第三方图书馆?这不是我的首选 - 我需要在未来支持这个系统.
任何指导和建议将非常感谢.