Search code examples
c#xmlsaving-data

Creating different XML files depending on the existence of others c#


having an issue when saving data, I am trying to set it up so if the user tries to save their name data for their character and a file already exists, it will create a second xml file "NameData2.xml" and so forth until a maximum of 3 files is reached, ( so the user has differant characters to choose from ) however at the moment it is simply creating 2 xml files at once all containing the same name ( i would guess this is due to them checking all at once in the same if else statements possibly? all i could find when trying to find an answer was how to check for a files existence and if it cant find it how to create one, i will post my code below if anyone has any suggestions that would be brilliant as im quite stumped!

Thankyou in advance.

    // This will save the users generated name in a created file
    // NameData.xml and will take the user to the partySelectionScreen.
    private void continueButton_Click(object sender, RoutedEventArgs e)
    {

        try
        {
            NameSavingInformation nameInfo = new NameSavingInformation();
            nameInfo.GeneratedName = generatedNameTexbox.Text;
            SaveXml.SaveData(nameInfo, "NameData.xml");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 

        if(File.Exists("NameData.xml"))
        {
            NameSavingInformation nameInfo = new NameSavingInformation();
            nameInfo.GeneratedName = generatedNameTexbox.Text;
            SaveXml.SaveData(nameInfo, "NameData2.xml");
        } 
        else if (File.Exists("NameData2.xml"))
        {
            NameSavingInformation nameInfo = new NameSavingInformation();
            nameInfo.GeneratedName = generatedNameTexbox.Text;
            SaveXml.SaveData(nameInfo, "NameData3.xml");
        }
        else if (File.Exists("NameData3.xml"))
        {
            MessageBox.Show("You have passed the limit of existing characters" +
                "To continue please return to the main menu and delete at least 1 character");
        }

Solution

  • You should do like this. This will perform a a search on the files that doesn't exists and will generate them. This will permit the user to delete any character the wants without breaking the algorithm.

    private void continueButton_Click(object sender, RoutedEventArgs e)
    { 
        if(!File.Exists("NameData.xml"))
        {
            SaveFileInfo("NameData.xml");
        } 
        else if (!File.Exists("NameData2.xml"))
        {
            SaveFileInfo("NameData2.xml");
        }
        else if (!File.Exists("NameData3.xml"))
        {
            SaveFileInfo("NameData3.xml");
        }
        else
        {
            MessageBox.Show("You have passed the limit of existing characters" +
                "To continue please return to the main menu and delete at least 1 character");
        }
    }
    
    public SaveFileInfo(string fileName)
    {
        try
        {
            NameSavingInformation nameInfo = new NameSavingInformation();
            nameInfo.GeneratedName = generatedNameTexbox.Text;
            SaveXml.SaveData(nameInfo, fileName);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }