|
dir /s promises to list files
and GetFiles() returns a list of files
In .NET file seems to mean leaf node in the file system's hierarchy;
in DOS I dont know, maybe they still realized a directory was actually also a logical unit
of information, aka file.
My observations indicate a difference between both worlds, I guess that is what
progress is all about ?
Luc Pattyn
|
|
|
|
|
No files are in the root directory ?
Christian Graus - C++ MVP
'Why don't we jump on a fad that hasn't already been widely discredited ?' - Dilbert
|
|
|
|
|
None unless they are hidden system files.
|
|
|
|
|
Well, perhaps they are.
Christian Graus - C++ MVP
'Why don't we jump on a fad that hasn't already been widely discredited ?' - Dilbert
|
|
|
|
|
WE have differences of many hundreds of files. I have now verified that all directories with names more than alpha 't' are not being read. For example the directory "world" is not read change name to "sworld" and it is included. Change the name to "tworld" and it is not.
|
|
|
|
|
I suggest you adapt your code to produce a file similar to the one from the DOS command.
Then a simple WinDiff should point you straight at the heart of the problem.
Luc Pattyn
|
|
|
|
|
I have revised my program to examine all the files on the C: drive. I have placed the files in a sorted list box.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
static int countFiles = 0;
public Form1()
{
InitializeComponent();
}
ArrayList list = new ArrayList();
void DirSearch(string sDir)
{
try
{
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d, "*.*"))
{
list.Add(f);
countFiles++;
}
DirSearch(d);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
listBox1.Items.Clear();
listBox1.Sorted = true;
list.Clear();
countFiles = 0;
DirSearch("c:\\");
foreach (string s in list) listBox1.Items.Add(s);
listBox1.Items.Add(" --> Number Of Files = " + countFiles);
this.Cursor = Cursors.Default;
}
}
}
When I run this code all directories begining with the letter 't' or more are NOT present this includes the "Windows" directory. I have now tested this on four different machines all of which report the same erroneus result. A directory called "system" is found and one called "text" is not.
|
|
|
|
|
Some ideas. maybe one of them triggers something:
- Are the missing names included in the ArrayList ? (is it listbox that failes ? or GetDirectories ?)
- do you have any special attributes set on the missing directories ?
- Are your different PCs cloned from a single one ?
- if directories show the problem, you can drop the GetFiles() stuff while debugging
- How does the "Windows" directory start with 't' ?
- does it also fail when starting with 'T' ? (filenames are supposed to be case insensitive)
- do you have anything special as Regional Settings, Culture, ... ?
Luc Pattyn
|
|
|
|
|
Some ideas. maybe one of them triggers something:
- Are the missing names included in the ArrayList ? (is it listbox that failes ? or GetDirectories ?)
The list box and the array list have the same number of files and content so it must be GetDirectories that is failing.
- do you have any special attributes set on the missing directories ?
No Special attributes or hidden
- Are your different PCs cloned from a single one ?
No Each one was an origional install from its own Windows disk.
- if directories show the problem, you can drop the GetFiles() stuff while debugging
I will check this
- How does the "Windows" directory start with 't' ?
Windows starts with 'W' which is more than 'T'
- does it also fail when starting with 'T' ? (filenames are supposed to be case insensitive)
I tried both upper and lower case and they both do the same "sWorld", "Sworld, will be found but not "tworld", "Tworld", or "Windows". I know this sounds weird but I have spent two days on this problem and I still dont have a clue. If you want post a message at electricfarm@gmail.com and I will send a Zip of the program and source. I tried to post it to Mediafire.com but they are having problems today.
- do you have anything special as Regional Settings, Culture, ... ?
|
|
|
|
|
One more idea: maybe you have some malware on your machine(s) that, so far, successfully
remained hidden; there exist such things that use what is known as a "root kit" to hide
themselves, basically by changing the internals of FindFirst/FindNext (on which dir
and GetDirectories must be based).
If it is, I would not expect that to hide all t* directories, just its own, but who knows.
I tried all kinds of strings in a System.Windows.Forms.Listbox, it does not care about
the string content, so it happily holds Temp and text folders.
Time to call the ghost busters ?
Luc Pattyn
|
|
|
|
|
This includes all directories 't-z'. Two of the machines have no modem so they should be clean. I am going to try using DirSearch recursivly on each directory on the root of the drive and see what happens!??
|
|
|
|
|
I think I have hit on a clue now, there may be a "System Volume Information" folder
(that is high up in the s-es, just before t) to which you dont have access
(something like UnauthorizedAccessException).
The one missing link now is how come you don't see such UnauthorizedAccessException ?
Luc Pattyn
|
|
|
|
|
Yes, I am pretty sure now, GetDirectories will return a "System Volume Information" folder
when such beast exists, but GetFile() will throw an UnauthorizedAccessException on it.
This exception gets mentioned in Visual's output pane as a "first chance ...exception..."
but I am not familiar with that, I'm still working with 1.1 most of the time.
BTW, you dont see some files/folders in Explorer, when you keep the default setting
of "hide protected operating system files (recommended)" checked.
IMHO software developers should better see all files at all times, so unchecking this
is one of the first things I do an a PC.
Luc Pattyn
|
|
|
|
|
Just another idea of implementation, not the best i'm afraid, cause it is slow to run, but maybe the most accurate since you require no specific programming. Sorry i only have a sample in VBA code, but with it you can compare your result and maybe determine where the error is:
<br />
With Application.FileSearch<br />
.NewSearch<br />
.LookIn = "c:\temp"<br />
.Filename = "*.txt"<br />
.MatchTextExactly = True<br />
.SearchSubFolders = True 'look in sub folders<br />
If .Execute > 0 Then<br />
For i = 1 To .FoundFiles.Count<br />
'do something with each file<br />
next<br />
end if<br />
David Domingues at webrickco@gmail.com. Feel free to visit http://webrick.athost.net/index.php
|
|
|
|
|
Well I guess we can put this thread to bed. After two days of frustration Luk Pattyn has revised the code that I got from MSDN that did not work. I am writing a new MP3 player and I wanted a list of all the MP3 files on a drive in an array that I could use to run the player. The code from MSDN worked as long as the number of files was small but my music drives have tens of thousands of files and the array never seemed to match the actual content of the drive. I have zipped the final code into Recurdir.zip and I will post for benefit of all. Thanks to all for their suggestions and advice.
|
|
|
|
|
I'm pleased to hear you got your entire app working satisfactorily now.
Enjoy !
Luc Pattyn
|
|
|
|
|
tutor 06 - Recursive search of directories
for download: http://www.mediafire.com/?7z5yzqgjytm[^]
Recently while writing my new MP3 player I wanted to do a recursive search of a drive to find all the MP3 files. I downloaded the code from MSN and after thinking I had a working program I discovered that the file count was incorrect. At that point I suspected that I was running to a limitation of a memory array or perhaps the list Box. With the help "Code Project" friends we solved the problem.
This code was originally was downloaded from MSDN and the code did not read properly. I want to thank Luc Pattyn for his rewrite, which works properly. I have tested this code on my .mp3 collection and it puts 17,223 in the listbBox. This is the exact number of files on the drive.
At first I thought the problem had to do with limitations in the number of lines in an array or perhaps a limitation of the listBox. To test this I created a program to write 80,000 lines of 256 characters to an array and then populate the listBox from the array. There must be an eventual limitation but I did not find it. I can't visualize a need beyond this test for my simple needs.
-- modified at 8:06 Monday 12th February, 2007
|
|
|
|
|
Hi all,
I have created a Windows Service in visual Studio 2005 beta version.In this service,I want to import a dll called CamtoJ2k.dll.
[DllImport("CamToJ2K.DLL", CharSet = CharSet.Unicode)]<br />
<br />
static extern bool CamToJ2K(string sourcePath, string destinationPath, int qFactor);
I also copied this dll in bin\debug folder.
When i ran the service ,i got an error that unable find the dll.
Exception:System.DllNotFoundException: Unable to load DLL 'CamToJ2K.DLL': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
Plz tell me about
1.how to import dll in service
2.do i need to add any reference to this dll(i tried this but couldnt able to add )
Thanks in Advance..
cheers
sangeet
|
|
|
|
|
I want to make a simple ASP.Net project that has a single web form where the client will write a url with a query string, so can I make the first page accepts or getting the sent data from the client
Thanks alot
Hamody
|
|
|
|
|
I don't see a question here. What do you want to do ? You want to accept data via the QueryString ? Request.QueryString is what you need to examine values. If Request.QueryString["xxx"] is not null, then a value has been provided for xxx, even if it's an empty string.
Christian Graus - C++ MVP
'Why don't we jump on a fad that hasn't already been widely discredited ?' - Dilbert
|
|
|
|
|
When you will do this, you will know almost everything there is to know about web form programing.
David Domingues at webrickco@gmail.com. Feel free to visit http://webrick.athost.net/index.php
|
|
|
|
|
thanks a lot there but i mean that I want 2 know if I can make a single form web project that accepts a query string values, as the client will wrtie a url as seen down:
http://www.md.com/mid=344&mname=mohd
the above url is as an example, can i make this single form web page project or d u have any idea
Thanks alot
Hamody
|
|
|
|
|
You're asking on the C# forum, so I assume you want to use ASP.NET. I don't see what the big deal is - like I said, you can use Request.QueryString to get the values. What else do you need to know ?
Christian Graus - C++ MVP
'Why don't we jump on a fad that hasn't already been widely discredited ?' - Dilbert
|
|
|
|
|
yeah i know but is it ok or allowed on the login form??
Thanks alot
Hamody
|
|
|
|
|
It's a bit unusual, but there's not such thing as a 'login form', it's all just HTML. You can do whatever you like.
Christian Graus - C++ MVP
'Why don't we jump on a fad that hasn't already been widely discredited ?' - Dilbert
|
|
|
|