How to check if extensions follows up in a list?
-
It doesnt concern explorer. Basicly, the intention of this application would be to check if JPG files have their duplicate TIF files. If it would be just 1-1, then i could do it... but i cant figure this one out. And what i ment by an error was to put as an output - in which folder the files dont match.
Regards, Matjaž
its simple then... try this
bool Test(string dirPath) { string\[\] filePaths = Directory.GetFiles(dirPath, "\*.jpg"); for (int a = 0; a < filePaths.Length; a++) { if (!File.Exists(Path.Combine(dirPath, Path.GetFileNameWithoutExtension(filePaths\[a\]) + ".tif"))) return false; } return true; }
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN% Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia> -------------------------------------------------------- 128 bit encrypted signature, crack if you can
-
its simple then... try this
bool Test(string dirPath) { string\[\] filePaths = Directory.GetFiles(dirPath, "\*.jpg"); for (int a = 0; a < filePaths.Length; a++) { if (!File.Exists(Path.Combine(dirPath, Path.GetFileNameWithoutExtension(filePaths\[a\]) + ".tif"))) return false; } return true; }
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN% Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia> -------------------------------------------------------- 128 bit encrypted signature, crack if you can
Umm not duplicates :/ sorry... just... the follow up files. 1.jpg has his own tif, but with a different name. example... 3.tif, because there is another 2.jpg before.
Regards, Matjaž
-
Umm not duplicates :/ sorry... just... the follow up files. 1.jpg has his own tif, but with a different name. example... 3.tif, because there is another 2.jpg before.
Regards, Matjaž
-
In that case, just get the count of files with JPG and count of files with TIF and they must be equal. Dump the code I had posted. Edit: There is a lot of misunderstanding going on in this post. :doh:
Happy Holi[^] जय हिंद
I already thought of that - but it is definitly a no-go. Why? Well, maybe there are some files which dont have their tifs, but some tiffs dont have their jpgs - and the count may match.
Regards, Matjaž
-
Umm not duplicates :/ sorry... just... the follow up files. 1.jpg has his own tif, but with a different name. example... 3.tif, because there is another 2.jpg before.
Regards, Matjaž
aha I got ya now. The thing you want called Stack. Last In Last Out.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN% Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia> -------------------------------------------------------- 128 bit encrypted signature, crack if you can
-
AFAIK you just need to set up some loops wisely. Here is a bit of quick and dirty approach I could think of:
List s = new List ();
s.Add("jpg");
s.Add("tif");
s.Add("jpg");
s.Add("tif");
s.Add("jpg");
s.Add("jpg");
s.Add("tif");
s.Add("tif");
s.Add("jpg");
s.Add("tif");bool breakFor = false; int togetherCount = 1; for (int i = 1;i < s.Count -1;i++) { if (s\[i\] == s\[i - 1\]) { togetherCount++; continue; } else { int count = 0; while (count < togetherCount) { if (!(s\[i + 1\] == s\[i + count\])) { if (togetherCount > 1) { MessageBox.Show("error"); breakFor = true; break; } } count++; } if (breakFor) { break; } else { i = i + togetherCount; togetherCount = 1; } } }
It might not be correct but good to start off I guess.
Happy Holi[^] जय हिंद
Hmm... it sure looks like it's in the right way. Thanks for taking the time. I'll try to implent something similar and report what happend. Thank you
Regards, Matjaž
-
AFAIK you just need to set up some loops wisely. Here is a bit of quick and dirty approach I could think of:
List s = new List ();
s.Add("jpg");
s.Add("tif");
s.Add("jpg");
s.Add("tif");
s.Add("jpg");
s.Add("jpg");
s.Add("tif");
s.Add("tif");
s.Add("jpg");
s.Add("tif");bool breakFor = false; int togetherCount = 1; for (int i = 1;i < s.Count -1;i++) { if (s\[i\] == s\[i - 1\]) { togetherCount++; continue; } else { int count = 0; while (count < togetherCount) { if (!(s\[i + 1\] == s\[i + count\])) { if (togetherCount > 1) { MessageBox.Show("error"); breakFor = true; break; } } count++; } if (breakFor) { break; } else { i = i + togetherCount; togetherCount = 1; } } }
It might not be correct but good to start off I guess.
Happy Holi[^] जय हिंद
Somehow it seems i didnt implent this correctly... or it doesnt work right (like you said, it could and could not work)... aah :/
if (fbd1.ShowDialog() != DialogResult.Cancel)
{
if (checkBox1.Checked == true)
DIRI.Items.AddRange(Directory.GetDirectories(fbd1.SelectedPath, "*.*", SearchOption.AllDirectories));
else
DIRI.Items.AddRange(Directory.GetDirectories(fbd1.SelectedPath, "*.*", SearchOption.TopDirectoryOnly));for (int i = 0; i < DIRI.Items.Count; i++) { ArrayList DATOTEKE = new ArrayList(); DATOTEKE.AddRange(Directory.GetFiles(DIRI.Items\[i\].ToString().ToLower())); ArrayList KONCNICE = new ArrayList(); for (int bo = 0; bo < DATOTEKE.Count; bo++) { KONCNICE.Add(Path.GetExtension(DATOTEKE\[i\].ToString())); } bool breakFor = false; int togetherCount = 1; for (int j = 1; j < KONCNICE.Count - 1; i++) { if (KONCNICE\[j\] == KONCNICE\[j - 1\]) { togetherCount++; continue; } else { int count = 0; while (count < togetherCount) { if (!(KONCNICE\[j + 1\] == KONCNICE\[j + count\])) { if (togetherCount > 1) { //if (listBox1.FindStringExact(DIRI.Items\[i\].ToString()) > 0) listBox1.Items.Add(DIRI.Items\[i\].ToString()); breakFor = true; break; } } count++; } if (breakFor) { break; } else { j = j + togetherCount;
-
Somehow it seems i didnt implent this correctly... or it doesnt work right (like you said, it could and could not work)... aah :/
if (fbd1.ShowDialog() != DialogResult.Cancel)
{
if (checkBox1.Checked == true)
DIRI.Items.AddRange(Directory.GetDirectories(fbd1.SelectedPath, "*.*", SearchOption.AllDirectories));
else
DIRI.Items.AddRange(Directory.GetDirectories(fbd1.SelectedPath, "*.*", SearchOption.TopDirectoryOnly));for (int i = 0; i < DIRI.Items.Count; i++) { ArrayList DATOTEKE = new ArrayList(); DATOTEKE.AddRange(Directory.GetFiles(DIRI.Items\[i\].ToString().ToLower())); ArrayList KONCNICE = new ArrayList(); for (int bo = 0; bo < DATOTEKE.Count; bo++) { KONCNICE.Add(Path.GetExtension(DATOTEKE\[i\].ToString())); } bool breakFor = false; int togetherCount = 1; for (int j = 1; j < KONCNICE.Count - 1; i++) { if (KONCNICE\[j\] == KONCNICE\[j - 1\]) { togetherCount++; continue; } else { int count = 0; while (count < togetherCount) { if (!(KONCNICE\[j + 1\] == KONCNICE\[j + count\])) { if (togetherCount > 1) { //if (listBox1.FindStringExact(DIRI.Items\[i\].ToString()) > 0) listBox1.Items.Add(DIRI.Items\[i\].ToString()); breakFor = true; break; } } count++; } if (breakFor) { break; } else { j = j + togetherCount;
I would say, debug the code and find where you are wrong. Get hold of the logic and you will be done.
Matjaž Grahek wrote:
if (!(KONCNICE[j + 1] == KONCNICE[j + count]))
One thing I can figure out is you need to remoe this + 1. I have not debugged the code just read it so I may go wrong.
Happy Holi[^] जय हिंद
-
Yes. That's right.
Regards, Matjaž
In today's pseudo-language that would be:
filelist=getAllFilenames()
filelist.Sort
diff=0
foreach(file in filelist) {
if (jpg) diff++
else diff--
if (diff<-1 or diff>1) error
}Two remarks: 1. to get a natural sort order for the file names, same as Windows Explorer does, you would need to use Explorer's code, i.e. use P/Invoke and the prototype:
\[DllImport("shlwapi.dll", CharSet=CharSet.Unicode, ExactSpelling=true)\] private static extern int StrCmpLogicalW(string s1, string s2);
Of course if the name part is just a number, you could use int.Parse and sort based on the outcome. 2. I cannot imagine where and how your requirement could ever have a useful application. :)
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
-
Umm not duplicates :/ sorry... just... the follow up files. 1.jpg has his own tif, but with a different name. example... 3.tif, because there is another 2.jpg before.
Regards, Matjaž
Matjaž Grahek wrote:
1.jpg has his own tif, but with a different name
that is plain stupid. Extensions exist so files that belong together can share the name part of a filename. Use it to your advantage rather than strugging with some code to fix the mistake. :)
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets