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!");
}
お礼
申し訳ありません。 パスワードが間違っていただけのようです。 教えていただいた構造体で正しく動作しました。 ありがとうございました。
補足
早速のご回答、ありがとうございます。 MSDNにある「WNetAddConnection3 関数は、 構造体の上記以外のメンバを無視します。」 というのは宣言をしなくてもいいということではないのですね。 教えていただいた通りに定義をして、特に値を設定することなく実行しました。 WNetAddConnection3の戻り値が「1208」になりましたが、以降は同じエラー結果です。 また、C#で関係するかわかりませんでしたが、どこかでポインタがどうこうという内容を読んだため、 [StructLayout(LayoutKind.Sequential)] public struct NETRESOURCE { public int dwScope; // Added public int dwType; public int dwDisplayType; // Added public int dwUsage; // Added [MarshalAs(UnmanagedType.LPWStr)] public string lpLocalName; [MarshalAs(UnmanagedType.LPWStr)] public string lpRemoteName; [MarshalAs(UnmanagedType.LPWStr)] public string lpComment; // Added [MarshalAs(UnmanagedType.LPWStr)] public string lpProvider; } で実行してみたところ WNetAddConnection3の戻り値が「67」になり、以降は同じエラー結果です。 他にはどこを気をつけたほうがいいのでしょうか? また、WNetAddConnection3の戻り値の内容がどのようなエラーを指しているのかがわかるサイト等を教えていただけたらと思います。 以上、よろしくお願いいたします。