[Resolved] Searching for a file in multiple directories?
-
Goaty65109 wrote:
that just gives me the paths to the directories that contain a file called settings.txt
Not quite - if you add a button to your form and run that code in the button click, you will find it prints the full path to all the files called "Settings.txt". So all you have to do is feed the string into your IniFile constructor and access the file:
IniFile ini = new IniFile(file);
You can then add each setting value to your ComboBox Items collection. You don't want to set the Text property each time, because that will only show the last value you set into it - it is just a string property after all! :laugh:
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.
So let me make sure I understand this correctly, and please forgive me as I am completely novice and am running through as many training videos as I can all the while trying to dream big with my own personal projects. After I generate that information, I just need to plug this into a button (or form_load as intended): IniFile ini = new IniFile(file); comboBox = ini.IniReadValue("Info", "Name"); and it will simply fill my combo box with my desired settings? I have a feeling I am wrong as this sounds too simple, or maybe I just hit the jackpot on my biggest hurdle. Thank you so much for working with me. :)
-
So let me make sure I understand this correctly, and please forgive me as I am completely novice and am running through as many training videos as I can all the while trying to dream big with my own personal projects. After I generate that information, I just need to plug this into a button (or form_load as intended): IniFile ini = new IniFile(file); comboBox = ini.IniReadValue("Info", "Name"); and it will simply fill my combo box with my desired settings? I have a feeling I am wrong as this sounds too simple, or maybe I just hit the jackpot on my biggest hurdle. Thank you so much for working with me. :)
Not quite that simple - you need to use both bits of code, and you can't assign a string to a ComboBox variable! :laugh: Try something like this:
string[] SettingsFiles = Directory.GetFiles(@"D:\Temp\", "Settings.txt", SearchOption.AllDirectories);
comboBox.Items.Clear();
foreach (string file in SettingsFiles)
{
IniFile ini = new IniFile(file);
comboBox.Items.Add(ini.IniReadValue("Info", "Name"));
}BTW: you probably don't need the "Ini" part on the method name "IniReadValue" - it is implied by the fact that it's an IniFile method.
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.
-
Not quite that simple - you need to use both bits of code, and you can't assign a string to a ComboBox variable! :laugh: Try something like this:
string[] SettingsFiles = Directory.GetFiles(@"D:\Temp\", "Settings.txt", SearchOption.AllDirectories);
comboBox.Items.Clear();
foreach (string file in SettingsFiles)
{
IniFile ini = new IniFile(file);
comboBox.Items.Add(ini.IniReadValue("Info", "Name"));
}BTW: you probably don't need the "Ini" part on the method name "IniReadValue" - it is implied by the fact that it's an IniFile method.
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.
You are absolutely amazing, thank you so much. I am still rebuilding, but I will get back with you with my results. Is there any way to give you props on this site? I would like to contribute to whatever the reputation tracker is. Thank you so much!
-
You are absolutely amazing, thank you so much. I am still rebuilding, but I will get back with you with my results. Is there any way to give you props on this site? I would like to contribute to whatever the reputation tracker is. Thank you so much!
You're welcome! You can vote on (almost) any message - in the forums there is a green up arrow beside the message that adds to the authors rep, and a red one which takes from it.
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.
-
You're welcome! You can vote on (almost) any message - in the forums there is a green up arrow beside the message that adds to the authors rep, and a red one which takes from it.
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.
Question that came into my mind whilst I am close to being done rebuilding. Can I change the SearchOption.AllDirectories into something more specific? In case I copy and paste a directory to make a backup of the original settings? Like for instance, only look in folders that BEGIN with "BRD"? Thanks again. SearchOption = "\\BRD*"); <--- just an example of what I mean Edit: Ok it's all built. I am now running into an exception. Apparently, the name IniReadValue does not exist in the current context. But it exists in my ini class. public string IniReadValue(string Section,string Key) { StringBuilder temp = new StringBuilder(255); int i = GetPrivateProfileString(Section,Key,"",temp,255,this.path); return temp.ToString(); }
-
Question that came into my mind whilst I am close to being done rebuilding. Can I change the SearchOption.AllDirectories into something more specific? In case I copy and paste a directory to make a backup of the original settings? Like for instance, only look in folders that BEGIN with "BRD"? Thanks again. SearchOption = "\\BRD*"); <--- just an example of what I mean Edit: Ok it's all built. I am now running into an exception. Apparently, the name IniReadValue does not exist in the current context. But it exists in my ini class. public string IniReadValue(string Section,string Key) { StringBuilder temp = new StringBuilder(255); int i = GetPrivateProfileString(Section,Key,"",temp,255,this.path); return temp.ToString(); }
No - the search only considers file names, it doesn't compare against the path. But it's pretty easy do check afterwards:
if (file.Contains(@"\BRD"))
{
...
}Exception: (I suspect it's a compilation error?) Show your code (cut'n' paste so you don't mistype - and try using the "code" widget above the text box to format your code - it makes it easier to read)
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.
-
No - the search only considers file names, it doesn't compare against the path. But it's pretty easy do check afterwards:
if (file.Contains(@"\BRD"))
{
...
}Exception: (I suspect it's a compilation error?) Show your code (cut'n' paste so you don't mistype - and try using the "code" widget above the text box to format your code - it makes it easier to read)
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.
Here is my main form:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using ReadWriteIni;
using Ini;namespace ReadWriteIni
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}private void Form1\_Load(object sender, EventArgs e) { string\[\] settingsFiles = Directory.GetFiles(@"C:\\\\Users\\\\Name\\\\Desktop\\\\Projects\\\\test.Files\\\\Folders\\\\", "Settings.txt", SearchOption.AllDirectories); comboInst.Items.Clear(); foreach (string file in settingsFiles) { IniFile ini = new IniFile(file); comboInst.Items.Add(Ini.IniReadValue("Info", "Name")); } } }
}
And here is my Ini Class (Wish there was a spoiler tag to collapse this part...)
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;namespace Ini
{
public class IniFile
{
public string path;\[DllImport("kernel32")\] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); \[DllImport("kernel32")\] private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); public IniFile(string INIPath) { path = INIPath; } public void IniWriteValue(string Section, string Key, string Value) { WritePrivateProfileString(Section, Key, Value, this.path); } public string IniReadValue(string Section, string Key) { StringBuilder temp = new StringBuilder(255); int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.path); return temp.ToString(); } }
}
-
Here is my main form:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using ReadWriteIni;
using Ini;namespace ReadWriteIni
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}private void Form1\_Load(object sender, EventArgs e) { string\[\] settingsFiles = Directory.GetFiles(@"C:\\\\Users\\\\Name\\\\Desktop\\\\Projects\\\\test.Files\\\\Folders\\\\", "Settings.txt", SearchOption.AllDirectories); comboInst.Items.Clear(); foreach (string file in settingsFiles) { IniFile ini = new IniFile(file); comboInst.Items.Add(Ini.IniReadValue("Info", "Name")); } } }
}
And here is my Ini Class (Wish there was a spoiler tag to collapse this part...)
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;namespace Ini
{
public class IniFile
{
public string path;\[DllImport("kernel32")\] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); \[DllImport("kernel32")\] private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); public IniFile(string INIPath) { path = INIPath; } public void IniWriteValue(string Section, string Key, string Value) { WritePrivateProfileString(Section, Key, Value, this.path); } public string IniReadValue(string Section, string Key) { StringBuilder temp = new StringBuilder(255); int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.path); return temp.ToString(); } }
}
Remember that c# is case sensitive:
IniFile ini = new IniFile(file); comboInst.Items.Add(Ini.IniReadValue("Info", "Name"));
------------------------------------^
Becomes:
IniFile ini = new IniFile(file); comboInst.Items.Add(ini.IniReadValue("Info", "Name"));
------------------------------------^
You need to make the two names match!
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.
-
Remember that c# is case sensitive:
IniFile ini = new IniFile(file); comboInst.Items.Add(Ini.IniReadValue("Info", "Name"));
------------------------------------^
Becomes:
IniFile ini = new IniFile(file); comboInst.Items.Add(ini.IniReadValue("Info", "Name"));
------------------------------------^
You need to make the two names match!
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.
Well I'll be damned. It works! Words cannot express my thanks. I can now move on with the fun, visual side of things and actually get this mess put together. You sir are fantastic. Bookmarked, as well as a couple of your Guides (I'll probably be seeing you again once I wish to make simple SELECT queries to SQL). It's 6:15 here, been trying to tackle this since 9pm yesterday, you saved me so much time and I appreciate it. You have a good day man! and good night. :) :) :) :) :) :)
-
Well I'll be damned. It works! Words cannot express my thanks. I can now move on with the fun, visual side of things and actually get this mess put together. You sir are fantastic. Bookmarked, as well as a couple of your Guides (I'll probably be seeing you again once I wish to make simple SELECT queries to SQL). It's 6:15 here, been trying to tackle this since 9pm yesterday, you saved me so much time and I appreciate it. You have a good day man! and good night. :) :) :) :) :) :)
You're welcome!
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.