C#でiniファイルの書き込みがうまくいきません。
C#初心者です。今回INIファイルを生成→書き込みを行うためのソースコードを書いたのですが、空ファイルの生成はうまくいくのにINIファイルへの書き込みがうまくいかず、空ファイルのままになってしまいます。なぜでしょうか?
以下ソースコード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
namespace Loei_Server_
{
/* ネットで公開されていたINIファイルに関するクラス。 難しいことは考えちゃアカン。 */
class IniFileHandler
{
[DllImport("KERNEL32.DLL")]
public static extern uint
GetPrivateProfileString(string lpAppName,
string lpKeyName, string lpDefault,
StringBuilder lpReturnedString, uint nSize,
string lpFileName);
[DllImport("KERNEL32.DLL",
EntryPoint = "GetPrivateProfileStringA")]
public static extern uint
GetPrivateProfileStringByByteArray(string lpAppName,
string lpKeyName, string lpDefault,
byte[] lpReturnedString, uint nSize,
string lpFileName);
[DllImport("KERNEL32.DLL")]
public static extern uint
GetPrivateProfileInt(string lpAppName,
string lpKeyName, int nDefault, string lpFileName);
[DllImport("KERNEL32.DLL")]
public static extern uint WritePrivateProfileString(
string lpAppName,
string lpKeyName,
string lpString,
string lpFileName);
}
class Program
{
static void Main(string[] args)
{
/* 日付を取得。 */
DateTime this_time = DateTime.Now;
/* 多重起動するとマズイので多重起動していたら強制的に終了する。*/
if (System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length > 1)
{
Console.WriteLine(" [Error] " + "[" + this_time.ToString() + "] Application already has started. This program is on the nature, you can not multi-boot.");
return;
}
/* コンフィグデータの確認。なかったら勝手に生成する。 */
if (!File.Exists("Config.ini"))
{
Console.WriteLine(" [Warning] " + "[" + this_time.ToString() + "] Config.ini file could not be found. I created you.");
/* 空のINIファイルを生成。 */
StreamWriter writer = new StreamWriter("Config.ini", true);
/* 生成したINIファイルにいろいろ書き込む。 */
IniFileHandler.WritePrivateProfileString("Loei_Server_", "TCP_IP", "localhost", "Config.ini");
IniFileHandler.WritePrivateProfileString("Loei_Server_", "TCP_HOST", "25565", "Config.ini");
Console.WriteLine(" [Info] " + "[" + this_time.ToString() + "] It has generated an Config.ini file!");
}
お礼
有難う御座いました。ファイル保存に時間が掛かるため、 部分書き換えでと思っていましたが、根本的に設計が マズイこともわかりました。またよろしくお願い致します。