tags:

views:

2134

answers:

5

I have a ini file that i want to read a line from under [DEVICE] tab and the following line DeviceName=PHJ01444-MC35 and assign the value to a string.

[BEGIN-DO NOT CHANGE/MOVE THIS LINE]
[ExecList]
Exec4=PilotMobileBackup v1;Ver="1.0";NoUninst=1
Exec3=MC35 108 U 02;Ver="1.0.8";NoUninst=1
Exec2=FixMGa;Ver="1.0";Bck=1
Exec1=Clear Log MC35;Ver="1.0";Bck=1
[Kiosk]
Menu8=\Program Files\PilotMobile\Pilot Mobile Backup.exe
MenuCount=8
AdminPwd=D85F72A85AE65A71BF3178CC378B260E
MenuName8=Pilot Mobile Backup
Menu7=\Windows\SimManager.exe
MenuName7=Sim Manager
UserPwd=AF2163B24AF45971
PasswordPolicy=C34B3DE916AA052DCB2A63D7DCE83F17
DisableBeam=0
DisableBT=0
DisableSDCard=0
EnableAS=1
ActionCount=0
Url=file://\Application\MCPortal.htz
AutoLaunch=0
Menu6=\Windows\solitare.exe
MenuName6=Solitare
Menu5=\Windows\bubblebreaker.exe
MenuName5=Bubble Breaker
Menu4=\Windows\wrlsmgr.exe
MenuName4=Communications
Menu3=\Windows\Calendar.exe
MenuName3=Calendar
Menu2=\Windows\tmail.exe
MenuName2=Text Messaging
Menu1=\Program Files\PilotMobile\Pilot.Mobile.exe
MenuName1=Pilot Mobile
ShowStartMenu=1
CustomTaskBar=0
IdleTimeout=0
NoTaskbar=0
PPCKeys=1111111111111111
On=1
[Status]
MCLastConn=2006/10/01 00:50:56
[Connection]
DeploySvr1=********
[Locations]
Backup=Backup
Install=\Application
[Comm]
RetryDelay=60000
NoInBoundConnect=0
TLS=0
Broadcast=1
[Info]
LID=090128-117
PWDID=081212-10
TimeSyncID={249CEE72-5918-4D18-BEA8-11E8D8D972BF}
TimeSyncErrorInterval=5
TimeSyncInterval=120
AutoTimeSync=1
SecondarySNTPServer=ntp1.uk.uu.net
DefaultSNTPServer=ntp0.uk.uu.net
DepServerTimeSyncType=4
TimeSyncServerType=1
DFID=080717-8
Platform=PPC
Method=39
SiteName=*****
[Device]
SyncTimer=4
Ver=1
DeviceID={040171BD-3603-6106-A800-FFFFFFFFFFFF}
ShowTrayIcon=1
DeviceIDType=2
DeviceClass=AADE7ECE-DF8C-4AFC-89D2-DE7C73B579D0
DeviceName=PHJ01444-MC35
NameType=2

[END-DO NOT CHANGE/MOVE THIS LINE]
enter code here
+7  A: 

You could use Windows API for this. See http://jachman.wordpress.com/2006/09/11/how-to-access-ini-files-in-c-net/

rslite
+2  A: 

If you wanted the very simple but not very clean answer:

using System.IO;

StreamReader reader = new StreamReader(filename);
while(reader.ReadLine() != "[DEVICE]") { continue; }

const string DeviceNameString = "DeviceName=";
while(true) {
 string line = reader.ReadLine();
 if(line.Length < DeviceNameString.Length) { continue; }
 else if(line.Substring(0, DeviceNameString.Length) != DeviceNameString) { continue; }
 return line.Substring(DeviceNameString.Length);
}

If you're only intending to read one value from the file, it's a plausible option. I would probably combine the loops and add for some end of file checking though myself if you're serious about using this code.

Ray Hidayat
This is the solution I use
MartGriff
Don't forget about trimming the text you read from ini file that is eliminate white space before comparison
AppDeveloper
+1  A: 
string line;
string deviceName = string.Empty;
// Read the file and display it line by line.
using (System.IO.StreamReader file =
   new System.IO.StreamReader("c:\\file.ini"))
{
    while ((line = file.ReadLine()) != null)
    {
        if (line.ToLower().StartsWith("devicename"))
        {
            string[] fullName = line.Split('=');
            deviceName = fullName[1];
            break;
        }
    }
}

Console.WriteLine("Device Name =" + deviceName);
Console.ReadLine();

I am sure there are other ways.

RandomNoob
+3  A: 

Because writing everything in one line makes me a better person than you:

string s = File.ReadAllText("inifile.ini").Split('\r', '\n').First(st => st.StartsWith("DeviceName"));
BFree
:-D Questionable but fun!
Tor Haugen
:) Yea, something like that. Although, if you're guaranteed to have the ini file in the structure the OP posted, then there's no reason this wouldn't work. (I just tested it, and it does work).
BFree
A: 

Here is a good link on how to do read an Ini in a clean way.

http://www.crowsprogramming.com/archives/95