J'ai écrit du code qui me demande d'enregistrer un fichier texte. Cependant, je dois le faire enregistrer dans la racine de mon projet pour que tout le monde puisse y accéder, pas seulement moi.
Voici la méthode en question:
private void saveFileToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
string fileName = Microsoft.VisualBasic.Interaction.InputBox("Please enter a save file name.", "Save Game");
if (fileName.Equals(""))
{
MessageBox.Show("Please enter a valid save file name.");
}
else
{
fileName = String.Concat(fileName, ".gls");
MessageBox.Show("Saving to " + fileName);
System.IO.File.WriteAllText(saveScene.ToString(), AppDomain.CurrentDomain.BaseDirectory + @"\" + fileName);
}
}
catch (Exception f)
{
System.Diagnostics.Debug.Write(f);
}
}
Beaucoup de gens m'ont dit qu'en utilisant AppDomain.CurrentDomain.BaseDirectory
contiendrait l'emplacement dynamique de l'emplacement de stockage de l'application. Cependant, lorsque j'exécute cela, rien ne se passe et aucun fichier n'est créé.
Y a-t-il une autre façon de faire cela, ou est-ce que je l'utilise complètement mal?
File.WriteAllText nécessite deux paramètres:
Le premier est le FileName et le second est le contenu à écrire
File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + @"\" + fileName,
saveScene.ToString());
Gardez cependant à l'esprit que l'écriture dans le dossier actuel peut être problématique si l'utilisateur exécutant votre application n'a pas l'autorisation d'accéder au dossier. (Et dans le dernier OS, l'écriture dans les fichiers programme est très limitée). S'il est possible, changez cet emplacement pour ceux définis dans Environment.SpecialFolder enum
Je souhaite également suggérer d'utiliser la classe System.IO.Path lorsque vous devez créer des chemins et non une concaténation de chaînes où vous utilisez le très 'spécifique au système d'exploitation' constante "\"
pour séparer les chemins.
Dans votre exemple, j'écrirais
string destPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,fileName);
File.WriteAllText(destPath, saveScene.ToString());
pas besoin d'extra + @"\"
faites juste:
AppDomain.CurrentDomain.BaseDirectory + fileName
et remplacer les paramètres
saveScene.ToString()
et
AppDomain.CurrentDomain.BaseDirectory + fileName
votre code doit être:
private void saveFileToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
string fileName = Microsoft.VisualBasic.Interaction.InputBox("Please enter a save file name.", "Save Game");
if (fileName.Equals(""))
{
MessageBox.Show("Please enter a valid save file name.");
}
else
{
fileName = String.Concat(fileName, ".gls");
MessageBox.Show("Saving to " + fileName);
System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + fileName, saveScene.ToString());
}
}
catch (Exception f)
{
System.Diagnostics.Debug.Write(f);
}
}
vous pouvez lire sur File.WriteAllText
ici :
Paramètres
path Type: System.String The file to write to. contents Type: System.String The string to write to the file.
À la place d'utiliser AppDomain.CurrentDomain.BaseDirectory
vous pouvez le faire de cette façon:
File.WriteLine("data\\Mytxt.txt", "Success!");
Lorsque vous n'ajoutez rien, le répertoire de base est automatiquement supposé.