Можете ли вы использовать System.IO.Abstractions для прозрачной обработки различий между ZipArchive и реальной папкой фаC#

Место общения программистов C#
Ответить
Anonymous
 Можете ли вы использовать System.IO.Abstractions для прозрачной обработки различий между ZipArchive и реальной папкой фа

Сообщение Anonymous »

У меня есть программа, которая работает с проектами, состоящими из нескольких файлов. Каждый проект сохраняется в одноименной папке с одноименным файлом проекта и одним или несколькими вспомогательными файлами.

Код: Выделить всё

C:\...\Projects\Project01\
C:\...\Projects\Project01\project01.prj
C:\...\Projects\Project01\support-a.xyz
C:\...\Projects\Project01\support-b.xyz
C:\...\Projects\Project01\Sub\afile.xyz
Теперь я хочу иметь возможность заархивировать папку проекта в одноименный zip-архив:

Код: Выделить всё

C:\...\Projects\Project01.zip
Мне бы хотелось, чтобы моя программа имела доступ к файлам в архиве, как если бы они были файлами в папке. Проблема в том, что файловая система не обрабатывает путь, который объединяет расположение zip-файла с относительным путем к ZipArchiveEntry внутри zip-файла, например. C:\Temp\ProjectsProject01.zip\Sub\afile.xyz. Вы не можете создать FileStream с таким путем. Я мог бы создать функцию для обнаружения архива в пути, а затем использовать ZipArchive.GetEntry().Open() или FileStream для возврата потока. Но проблема лежит глубже. Мой существующий код также использует FileInfo, и он также не будет работать с этими гибридными путями.
Я думаю, у меня есть два варианта: либо добавить кучу логики для правильной обработки двух сценариев, или, возможно, я мог бы разработать реализации типов в System.IO.Abstractions для прозрачной обработки этого, делегируя при необходимости файловую систему или классы ZipArchive. Но мне интересно, не упускаю ли я какую-то фундаментальную причину, по которой это не сработает, например проблемы с одновременным доступом к нескольким файлам в архиве, когда удалять архив и т. д. Я подозреваю, что если бы это сработало, это уже было бы сделанный. Но тот факт, что Windows Explorer похоже реализует такое поведение, заставляет меня задаться вопросом, почему оно недоступно в System.IO.

Подробнее здесь: https://stackoverflow.com/questions/791 ... a-ziparchi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»