Virtual File System Laten inlezen.

Status
Niet open voor verdere reacties.

jimowns

Gebruiker
Lid geworden
2 sep 2006
Berichten
341
Hey,

Ik ben bezig met het maken van een inlezer voor Virtual File Systems.
Het bestandje dat ik wil laten lezen is BASIC.VFS.
Dit is van een spel en lijkt me wel een leuk projectje voor te doen.

In mijn Form applicatie heb ik een TreeVieuwlist gezet, voor alle elemanten die in de Virtual File system inzitten voor die in een TreeViuewList te zetten. Dat is natuurlijk overzichtelijker.

Het probleem zit bij de strings.
Bevoorbeeld: GF_GetEffectUseFile( "3DDATA/Effect/_congratulation_01.eft" )
Dit zit in de BASIC.VFS bestand.
Maar hoe kan ik de 3DDATA eruit halen en de Effect en het bestandje _congratulation_01.eft ?
de bestandjes verschillen elke keer.

En het 2de probleemje.
Het bestandje in 1GB groot, dus als ik die wil doorlezen, dan reageert mijn programma niet.
Hoe kan dit best oplossen?



dankjewel. ;)


Met vriendelijke groeten, Jim.
 
Laatst bewerkt:
Dankuwel ;).

Maar vooor het eerste probleem, heb ik liggen zoeken op internet, maar niets gevonden.



Dank bij voorbaad.


Met vriendelijke groetjes, jim
 
Om eerlijk te zijn snap ik je eerste probleem niet:

- Wat wil je met die string? Uit elkaar halen?
- Wat is het überhaupt voor een string? Een pad naar een bestand?
 
In het bestand is dit ingeschreven:
Code:
-- ź»ýÀÇ ¼¶ »ç³É Æ©Å丮¾ó ½ÃÀÛ À̺¥Æ®

function Tutorial_Move( iObject, iState, bJustEnd )
	SC_ShowTutorialImage("3Ddata/Tutorial/03.dds", 6, 145, 0.3, 6.5, 7, 0);
	SC_ShowTutorialImage("3Ddata/Tutorial/04.dds", 6, 145, 0.3, 9, 10, 1);
end

-- ź»ýÀÇ ¼¶ »ç³É Æ©Å丮¾ó ¿Ï·á À̺¥Æ®

function Tutorial_Hunt( iObject, iState, bJustEnd )
	SC_ShowTutorialImage("3Ddata/Tutorial/05.dds", 6, 145, 0.3, 6.5, 7, 0);
	SC_ShowTutorialImage("3Ddata/Tutorial/06.dds", 6, 145, 0.3, 9, 10, 1);
end

-- ź»ýÀÇ ¼¶ ¾Æ·ç¾ÆÀÇ ¿äÁ¤°ú ´ëÈ* Æ©Å丮¾ó ¿Ï·á À̺¥Æ®

function Tutorial_talk( iObject, iState, bJustEnd )
	SC_ShowTutorialImage("3Ddata/Tutorial/07.dds", 6, 145, 0.3, 9, 10, 0);
end

-- Airship Debris Quest (3201)

function Debris_Item( iObject, iState, bJustEnd )
	SC_ShowTutorialImage("3Ddata/Tutorial/3201_Item.dds", 300, 145, 0.3, 10, 10.3, 0);
	SC_SetButtonBlink( DLG_TYPE_MENU, MENU_BTN_QUEST )
end

nu wil ik er alles uithalen zoals in dit voorbeeld:
SC_ShowTutorialImage("3Ddata/Tutorial/3201_Item.dds",

Hij ziet dat 3DDATA een map is en Tutorial ook een map.
in de turial is er een bestaje van dds en die moet hij in de map van tutorial zetten.

dat moet hij in een treevieuw list zetten zoals dit:
Code:
+3DDATA
   |___ + Tutorial
              |____ 3201_Item.dds

en dat moet hij zo verder doen tot hij alle items heeft in de Tutorial map.
 
Even een korte vraag:

Waarbij je schrijft: In het bestand is dit ingeschreven:, is dat álles wat er in dat bestand staat? En wat voor bestand is het? Een tekstbestand?
 
Dat is niet alles, dit is een klein voorbeeldje.
Ik heb 2 verschillende VFS bestanden, eentje is 800MB en de andere is maar 1MB.
Ik zal de eene geven van 1MB.

Het gaat over een Virual File System bestand, .VFS

download:
http://www.sendspace.com/file/prwz16

Ik weet wel dat de Virtual File System ongeveer hetzelfde is al een ACSII bestand.
 
Laatst bewerkt:
Bedankt, ik ga even wat dingen uitproberen...
 
Klinks als een uitstekende gelegenheid om LinkedLists te gebruiken. Ik zal even kijken of ik het voor elkaar krijg, m`n linkedlist kennis is enigsinds afgezwakt vrees ik dus kan niks beloven :D
 
Laatst bewerkt:
Ik heb ook nog even gekeken. moet zeggen dat het niet m`n meest nette code is maargoed.

misschien heb je er nog wat extra aan:

Code:
private Node nodes = new Node();
        
        private TreeView view = new TreeView();
        private TreeNode mainNode = new TreeNode("Root");

        public Form1()
        {
            InitializeComponent();
           

            view.Nodes.Add(mainNode);

            this.Controls.Add(view);

            DoTest();
        }

        private void DoTest()
        {
            string test1 = "3Ddata/Tutorial/05.dds";
            string test2 = "3Ddata/Tutorial/06.dds";
            string test3 = "4Ddata/Tutorial/06.dds";
            string test4 = "3Ddata/Tutorial/05.dds/testing";
            FillTreeView(test1, mainNode);
            FillTreeView(test2, mainNode);
            FillTreeView(test3, mainNode);
            FillTreeView(test4, mainNode);
        }

        private void FillTreeView(string value, TreeNode node)
        {

            if (String.IsNullOrEmpty(value))
            {
                return;
            }

            string root = value.Split('/').First();         

            TreeNode n = new TreeNode(root);
           
            string subString = null;

            if (value.Contains('/'))
            {
                subString = value.Substring(root.Length + 1, value.Length - root.Length - 1);
            }

            TreeNode currentNode = GetCurrentNode(node,root);

            if (currentNode == null)
            {
                node.Nodes.Add(n);
            }

            currentNode = GetCurrentNode(node, root);           
            FillTreeView(subString, currentNode);
                                   
        }

        private TreeNode GetCurrentNode(TreeNode nodes, string value)
        {
            TreeNode currentNode = (from item in nodes.Nodes.Cast<TreeNode>().ToList()
                                    where item.Text == value
                                    select item).SingleOrDefault();
            return currentNode;
        }

pas hem aan zodat de code wat netter wordt. op deze manier heb je dus per node alleen unieke waardes.

hoop dat je ook hier nog wat aan hebt =)
 
Dankuwel Westerland ;).

ik ben het al vollop aan het bekijken, en aan het puzzelen ;).


Dankuwel Westerland en JoZ1 ! ;)



Met vriendelijke groetjes, Jim
 
Sorry voor deze latere bericht.
Ja, het is gelukt, dankuwel voormij te helpen ;).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan