2014-06-07 5 views
0

J'ai programmé en utilisant la classe 'Ini.cs', ce qui me permet de lire et d'écrire facilement des valeurs dans des fichiers ini, ce qui est utile pour les bases de données de base.La méthode IniReadValue renvoie une chaîne vide

partie de l'échantillon de mon dossier playerdata.ini:

[ktosthet]

argent = 550

maison = 0

lastbonus = 2014-06-07

bonuslevel = 0

Le nom de la section est le surnom du joueur, puis il y a de l'argent, le numéro de la maison, le dernier bonus quotidien et le niveau de bonus quotidien. Pour lire l'argent de fichier ini J'utilise ceci:

public int cash(string nick) 
{ 
if (haveAccount(nick)) 
{ 
return int.Parse(playerdata.IniReadValue(nick, "money")); 
} 
return 0; 
} 

playerdata est mon fichier ini, nick est la section et de l'argent est la clé. Il devrait retourner int 550, mais il semble que l'argent de la valeur de chaîne est vide.

Si je tente d'obtenir la valeur d'un autre point de code, de tout fichier ini, cela fonctionne. Mais dans ce cas, ce n'est pas le cas. Le chemin est bon, les fichiers ini sont initialisés et tout va bien. Des idées pour lesquelles cela ne fonctionnera pas?

Ini.cs Classe:

using System; 
using System.IO; 
using System.Runtime.InteropServices; 
using System.Text; 

namespace Ini 
{ 
    /// <summary> 
    /// Create a New INI file to store or load data 
    /// </summary> 
    public class IniFile 
    { 
     public string path; 

     [DllImport("kernel32")] 
     private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); 
     [DllImport("kernel32")] 
     private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); 

     /// <summary> 
     /// INIFile Constructor. 
     /// </summary> 
     /// <param name="INIPath"></param> 
     public IniFile(string INIPath) 
     { 
      path = INIPath; 
     } 
     /// <summary> 
     /// Write Data to the INI File 
     /// </summary> 
     /// <param name="Section"></param> 
     /// Section name 
     /// <param name="Key"></param> 
     /// Key Name 
     /// <param name="Value"></param> 
     /// Value Name 
     public void IniWriteValue(string Section, string Key, string Value) 
     { 
      WritePrivateProfileString(Section, Key, Value, this.path); 
     } 

     /// <summary> 
     /// Read Data Value From the Ini File 
     /// </summary> 
     /// <param name="Section"></param> 
     /// <param name="Key"></param> 
     /// <param name="Path"></param> 
     /// <returns></returns> 
     public string IniReadValue(string Section, string Key) 
     { 
      StringBuilder temp = new StringBuilder(255); 
      int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.path); 
      return temp.ToString(); 

     } 
    } 
} 

Voici playerdata:

IniFile playerdata; 
public string path = Directory.GetCurrentDirectory().Replace("City.EXE", ""); 
public Form1() 
{ 
InitializeComponent(); 
playerdata = new IniFile(path + "/paths/playerdata.ini"); 
} 
+0

Vous avez donc une variable globale appelée 'playerdata' que nous ne savons rien à ce sujet et un fichier' ini.cs' qui contient une classe que nous ne savons rien. Je suggère d'ajouter le code de cette classe et comment initialisez-vous la variable globale. (Ou mieux vérifier avec un débogueur pourquoi l'appel échoue) – Steve

+0

Très bien, a ajouté @Steve – ktostam450

+0

AFAIK rien ne se trompe clairement ici. Je suggère d'utiliser le débogueur et de vérifier si la valeur passée à l'appel est correcte. – Steve

Répondre

1

J'ai eu même problème plus tôt. Ensuite, j'ai changé «Copier dans le répertoire de sortie» à «Toujours copier» sous les propriétés du fichier .ini. Cela a fonctionné.

Questions connexes