@@ -103,6 +103,22 @@ static string GetPackageFolderPath(SharpTreeNode node)
103103 return name ;
104104 }
105105
106+ static string GetFileName ( string path , bool isFile , SharpTreeNode containingNode , PackageEntry entry )
107+ {
108+ string fileName ;
109+ if ( isFile )
110+ {
111+ fileName = path ;
112+ }
113+ else
114+ {
115+ string relativePackagePath = WholeProjectDecompiler . SanitizeFileName ( Path . Combine ( GetPackageFolderPath ( containingNode ) , entry . Name ) ) ;
116+ fileName = Path . Combine ( path , relativePackagePath ) ;
117+ }
118+
119+ return fileName ;
120+ }
121+
106122 internal static void Save ( DockWorkspace dockWorkspace , IEnumerable < SharpTreeNode > nodes , string path , bool isFile )
107123 {
108124 dockWorkspace . RunWithCancellation ( ct => Task < AvalonEditTextOutput > . Factory . StartNew ( ( ) => {
@@ -112,12 +128,12 @@ internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode
112128 {
113129 if ( node is AssemblyTreeNode { PackageEntry : { } assembly } )
114130 {
115- string fileName = isFile ? path : Path . Combine ( path , GetPackageFolderPath ( node . Parent ) , assembly . Name ) ;
131+ string fileName = GetFileName ( path , isFile , node . Parent , assembly ) ;
116132 SaveEntry ( output , assembly , fileName ) ;
117133 }
118134 else if ( node is ResourceTreeNode { Resource : PackageEntry { } resource } )
119135 {
120- string fileName = isFile ? path : Path . Combine ( path , GetPackageFolderPath ( node . Parent ) , resource . Name ) ;
136+ string fileName = GetFileName ( path , isFile , node . Parent , resource ) ;
121137 SaveEntry ( output , resource , fileName ) ;
122138 }
123139 else if ( node is PackageFolderTreeNode )
@@ -127,17 +143,17 @@ internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode
127143 {
128144 if ( item is AssemblyTreeNode { PackageEntry : { } asm } )
129145 {
130- string fileName = Path . Combine ( path , GetPackageFolderPath ( item . Parent ) , asm . Name ) ;
146+ string fileName = GetFileName ( path , isFile , item . Parent , asm ) ;
131147 SaveEntry ( output , asm , fileName ) ;
132148 }
133149 else if ( item is ResourceTreeNode { Resource : PackageEntry { } entry } )
134150 {
135- string fileName = Path . Combine ( path , GetPackageFolderPath ( item . Parent ) , entry . Name ) ;
151+ string fileName = GetFileName ( path , isFile , item . Parent , entry ) ;
136152 SaveEntry ( output , entry , fileName ) ;
137153 }
138154 else if ( item is PackageFolderTreeNode )
139155 {
140- Directory . CreateDirectory ( Path . Combine ( path , GetPackageFolderPath ( item ) ) ) ;
156+ Directory . CreateDirectory ( Path . Combine ( path , WholeProjectDecompiler . SanitizeFileName ( GetPackageFolderPath ( item ) ) ) ) ;
141157 }
142158 }
143159 }
@@ -154,7 +170,6 @@ internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode
154170 static void SaveEntry ( ITextOutput output , PackageEntry entry , string targetFileName )
155171 {
156172 output . Write ( entry . Name + ": " ) ;
157- targetFileName = WholeProjectDecompiler . SanitizeFileName ( targetFileName ) ;
158173 using Stream stream = entry . TryOpenStream ( ) ;
159174 if ( stream == null )
160175 {
0 commit comments