|
Hi,
if the number embedded in the filename uses a fixed format with leading zeroes the alphabetical order is the numeric order too, so no special comparer would be needed.
|
|
|
|
|
Luc Pattyn wrote: if the number embedded in the filename uses a fixed format with leading zeroes the alphabetical order is the numeric order too, so no special comparer would be needed.
True, but this requires two things:
1) the number has leading zeros
2) the "TextNN" files are the only files in this folder, no other files like "AAA" and "ZZZ" which would put the "TextNN" files to the middle of the list.
Duh, forgot you can use a filter pattern to get the filenames
With a custom comparer you're on the safe side
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Thank you all for your posts. It's been helpful. I'm still a little stuck, but I have the general idea.
The files may get deleted, so I will need to take that into account. Also, I'm not using any database and for this application wont be using one.
This is what I have so far. Please let me know if there are better methods:
public void filecount(string file)
{
int x;
int y;
string file;
int filepaths = Directory.GetFiles(@"C:\Desktop\Request", "*txt").Length;
x = filepaths +1;
StreamWriter sw;
sw = File.CreateText(@"C:\Desktop\Request\Text" +y +".txt");
file = Path.GetFileName(@"C:\Desktop\Request\Text" +y +".txt").ToString;
sw.Close();
return file;
}
public void btn_Click(object sender, EventArgs e)
{
filecount(file);
}
Thanks again for helping a newbie out!
|
|
|
|
|
That's how I'd do it:
string[] logfiles = Directory.GetFiles(@"../Files/", @"Text*.txt");
Array.Sort(logfiles, CompareFileNumbers);
int highestNumber = int.Parse(Regex.Match(logfiles[0], @"(\d+)").Value);
with the custom comparer being:
public static int CompareFileNumbers(string fileA, string fileB)
{
Regex regexNumber = new Regex(@"(\d+)");
int fileNumberA = int.Parse(regexNumber.Match(fileA).Value);
int fileNumberB = int.Parse(regexNumber.Match(fileB).Value);
return -fileNumberA.CompareTo(fileNumberB);
}
Tested and it works. You need to add error checking though in case the filenames don't have numbers (the regexes will fail) and other cases.
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
This won't work - in fact I don't think it will compile.
1 The return type is void but the function tries to return a string.
2 The parameter name (file) conflicts with the local variable also called file.
3 The value of y is not set but is used to construct the file name.
Couple of other comments.
1 Why use the x and y variables when you have filepaths. You could just set it to Directory.GetFiles(@"C:\Desktop\Request", "*txt").Length + 1. Then use it instead of x or y.
2 This approach does not deal with deleted files. Suppose there are three files originally (text1.txt, text2.txt, text3.txt). Then text1.txt is deleted. What will the file count be?
3 The function is named filecount but it actually tries to return the next filename.
4 Read some of the suggestions carefully - there's good stuff in them that should solve the problem.
Regards
David R
|
|
|
|
|
You are creating a web form to monitor a file on a network share?
Everyone else has addressed your questions adequately so I will just pose two alternatives which may be easier, if sequence is not important but uniqueness is use a GUID, if both are important a time stamp is also a good option.
Need software developed? Offering C# development all over the United States, ERL GLOBAL, Inc is the only call you will have to make.
If you don't ask questions the answers won't stand in your way.
Most of this sig is for Google, not ego.
|
|
|
|
|
The webform is used for more than just monitoring the text file. I need to have a text file as it is being used by another program. I originally thought of adding a timestamp into the filename to differentiate however, I thought an incrementing integer would be easier.
|
|
|
|
|
Incrementing the integer requires the following steps:
1) Find the highest file
2) Attempt to create the next number
3) Repeat on failure
A time stamp requires:
1) Attempt to create the file
2) Repeat on failure
Unfortunately, only the Win32 API allows you to do this without a try catch loop which I find poor practice.
Need software developed? Offering C# development all over the United States, ERL GLOBAL, Inc is the only call you will have to make.
If you don't ask questions the answers won't stand in your way.
Most of this sig is for Google, not ego.
|
|
|
|
|
You can check to see if a file with that name already exists.
|
|
|
|
|
Doesn't work in concurrent systems as the check for existence and creation have to be the same act, otherwise File.Exists then File.Create can fail.
Need software developed? Offering C# development all over the United States, ERL GLOBAL, Inc is the only call you will have to make.
If you don't ask questions the answers won't stand in your way.
Most of this sig is for Google, not ego.
|
|
|
|
|
I know. I don't think there's any way around a try/catch.
I would still opt for a database.
|
|
|
|
|
|
Didn't the original poster mention the API?
|
|
|
|
|
??
Need software developed? Offering C# development all over the United States, ERL GLOBAL, Inc is the only call you will have to make.
If you don't ask questions the answers won't stand in your way.
Most of this sig is for Google, not ego.
|
|
|
|
|
I'm using C# with ASP.NET.
|
|
|
|
|
|
Using the Win32 API is a perfectly valid way to overcome limitations in .NET. (Or at least a way to cut off your nose to spite your face)
Need software developed? Offering C# development all over the United States, ERL GLOBAL, Inc is the only call you will have to make.
If you don't ask questions the answers won't stand in your way.
Most of this sig is for Google, not ego.
|
|
|
|
|
In order to test for a null within a DataTable Column I use
DataRowView corrAddress = (DataRowView)debtorBinding.Current;
if (corrAddress["PostCode"] != DBNull.Value)
{
corrPostCodeTextBox.Text = corrAddress["PostCode"].ToString();
}
But
if (debtorDataSet.Debtor[0].HouseName != DBNull.Value)
{
corrHouseNameTextBox.Text = debtorDataSet.Debtor[0].HouseName.ToString();
}
does not work. How can i correct the second code snippet to work please?
|
|
|
|
|
if (String.IsNullOrEmpty(debtorDataSet.Debtor[0].HouseName))
I are troll
|
|
|
|
|
Thanks, but my data is DBnull not null. How can test for this by altering
if (String.IsNullOrEmpty(debtorDataSet.Debtor[0].HouseName))
please?
|
|
|
|
|
Hi to everyone...
Can anyone help me?
I have a small desktop application build in C#. It should create an XML file (already done this), and then enter the xml file in db, in the correct tables. For example,
xml file has this:
<name>John
<info>OtherData
now this file shoud be opened, and read all information, and entered in db, in the respective tables, for example name should be entered in tblCustomer, info should be entered in tblInfoCustomer...
All the Best..
KppsK
|
|
|
|
|
Parse the XML file for the values that you are looking for then create an SQL statement that takes the values as its parameters and inserts them. Look up SqlCommand on msdn, there are plenty of examples.
At university studying Software Engineering - if i say this line to girls i find they won't talk to me
Dan
|
|
|
|
|
Is the problem in extracting the information from the XML file? If that's the case, you could use XmlDocument[^] class, load the data into it and then extract the info you want. After that, using parameterized commands, insert/update the data into the database.
|
|
|
|
|
Hello,
Can We create dynamic enums at runtime instead of statically creating a class
a enum class like
public enum IceCream
{
[DescriptionAttribute("Choco Chip")]chocochip= 0,
[DescriptionAttribute("Butter Scotch")]buttersoctch= 1,
[DescriptionAttribute("Vannila")]vanilla= 2
}
something of this sort.
i ll appreciate any help on this
Thanks,
Mamtha
|
|
|
|
|
Have you tried it? Most of the rest of us that don't know would have to...
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|