Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't open written file #71

Open
bluewave41 opened this issue Mar 9, 2022 · 0 comments
Open

Can't open written file #71

bluewave41 opened this issue Mar 9, 2022 · 0 comments

Comments

@bluewave41
Copy link

bluewave41 commented Mar 9, 2022

Opening my bundle with AssetViewer shows 3 files

Icon - Sprite
SpriteIndex - AssetBundle
Icon - Texture2D

It's unity version is 2019.4.23f1

I've copy pasted the code for Writing an Asset Bundle as so

            var am = new AssetsManager();

            var bunInst = am.LoadBundleFile("art.bundle");
            //read the boring file from the bundle
            var inst = am.LoadAssetsFileFromBundle(bunInst, 0, false);

            var inf = inst.table.GetAssetInfo("Icon");
            var baseField = am.GetTypeInstance(inst, inf).GetBaseField();
            var thing = baseField.Get("m_Name").GetValue().AsString();
            Console.WriteLine(thing);
            baseField.Get("m_Name").GetValue().Set("MyCoolAsset");

            var newGoBytes = baseField.WriteToByteArray();
            var repl = new AssetsReplacerFromMemory(0, inf.index, (int)inf.curFileType, 0xffff, newGoBytes);

            //write changes to memory
            byte[] newAssetData;
            using (var stream = new MemoryStream())
            using (var writer = new AssetsFileWriter(stream))
            {
                inst.file.Write(writer, 0, new List<AssetsReplacer>() { repl }, 0);
                newAssetData = stream.ToArray();
            }

            //rename this asset name from boring to cool when saving
            var bunRepl = new BundleReplacerFromMemory("Icon", "Renamed", true, newAssetData, -1);

            var bunWriter = new AssetsFileWriter(File.OpenWrite("coolbundle.bundle"));
            bunInst.file.Write(bunWriter, new List<BundleReplacer>() { bunRepl });

Opening the created bundle gives the following error

System.ArgumentOutOfRangeException: Stream length must be non-negative and less than 2^31 - 1 - origin. (Parameter 'value')
   at System.IO.MemoryStream.set_Position(Int64 value)
   at AssetsTools.NET.AssetsFile..ctor(AssetsFileReader reader) in C:\Users\nesquack\Documents\GitReposLocal\AssetsTools.NET\AssetTools.NET\Standard\AssetsFileFormat\AssetsFile.cs:line 49
   at AssetsTools.NET.Extra.AssetsFileInstance..ctor(Stream stream, String filePath, String root) in C:\Users\nesquack\Documents\GitReposLocal\AssetsTools.NET\AssetTools.NET\Extra\AssetsManager\AssetsFileInstance.cs:line 26
   at AssetsTools.NET.Extra.AssetsManager.LoadAssetsFile(Stream stream, String path, Boolean loadDeps, String root, BundleFileInstance bunInst) in C:\Users\nesquack\Documents\GitReposLocal\AssetsTools.NET\AssetTools.NET\Extra\AssetsManager\AssetsManager.cs:line 29
   at AssetsView.Winforms.StartScreen.LoadBundleFile(String path) in C:\Users\nesquack\Documents\GitReposLocal\AssetsTools.NET\AssetsView\Winforms\StartScreen.cs:line 128
   at AssetsView.Winforms.StartScreen.addFileToolStripMenuItem_Click(Object sender, EventArgs e) in C:\Users\nesquack\Documents\GitReposLocal\AssetsTools.NET\AssetsView\Winforms\StartScreen.cs:line 103
   at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
   at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
   at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
   at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ToolStrip.WndProc(Message& m)
   at System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

If I DON'T rename the file then it saves and opens properly. That's exactly why I need this though... to rename a file in a bundle and I can't find a different tool that can do this programatically.

The headers are here where the first is changed and the second unchanged:

UnityFS    �5.x.x 2019.4.23f1       1»   [   [   @                                 �  bH  bH @   �              1    �CAB-0207725071a623d62e45b4a33e9c7b85       1       1(   �509   	é  1    �  �     2019.4.23f1 
UnityFS    �5.x.x 2019.4.23f1       1»   [   [   @                                 �  1   1  @   �              1    �CAB-0207725071a623d62e45b4a33e9c7b85   				é  1    �  �     2019.4.23f1 

So how do I rename this file then?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant