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!");
}
お礼
wormhole 様 前略 ・コンソールプログラムに変更したらうまくマウスのボタン数がかえってきました。ありがとうございます。 実行結果(コンソール画面のコピー)とプログラムを以下に添付します。 <追記>尚、実験したところ リード線付のマウス×2個では 添付の実行結果のどうりボタン数が3で外観と一致するのですが、通常私がつかっているワイヤレスマウス(ロジクール製)の場合同様にボタン数は3個に見えますが 何故か実行結果ではボタン数が16個となります。昨日はこの16個がプログラムが意図と違う動作をしているのではないかと思い昨日は1日悩んでいました。マウスによってはソフト的に16個もボタンがあるマウスもあるのでしょうかね.......??? //実行結果---------------------------------------------------------- DLL呼出し前: Num = 8 DLL呼出し前: Flag = False DLL呼出し後: Num = 3 DLL呼出し後: Flag = True 続行するには何かキーを押してください . . . //プログラム--------------------------------------------------------------- //Program.cs //GetNumberOfConsoleMouseButtons( )によりマウスのボタン数を取得するプログラム using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; // 追加 namespace DDL_Get_NumMouseBtn { class Program { //宣言部 [DllImport("kernel32.dll")] extern static bool GetNumberOfConsoleMouseButtons(ref uint lpNumberOfMouseButtons); static void Main(string[] args) { uint Num; bool Flag = false; Num = 8; Console.Write("DLL呼出し前: Num = {0:d}\n", Num); Console.Write("DLL呼出し前: Flag = {0:d}\n", Flag); Flag = GetNumberOfConsoleMouseButtons(ref Num); //関数の呼び出し Console.Write("DLL呼出し後: Num = {0:d}\n", Num); Console.Write("DLL呼出し後: Flag = {0:d}\n", Flag); } } }