Showing posts with label IO. Show all posts
Showing posts with label IO. Show all posts

Tuesday, June 29, 2010

How to: List all files in a Drive using C#

The code below shows how to use the System.IO.DirectoryInfo function to retreive all the files in the specified location, it also show how to get the extension and other information. Here in this code sample checking for DriveType CD Rom and files in that CD Drive.

Here is a sample code snippet for doing this. Have fun!

System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
string strDriverLetter = "";
bool boolDriveIsReady = false;
foreach (System.IO.DriveInfo drive in drives)
{
    if (drive.DriveType == System.IO.DriveType.CDRom)
    {
        Console.WriteLine("Drive Name: " + drive.Name);
        strDriverLetter = drive.Name;
        boolDriveIsReady = drive.IsReady;
        break;
    }
}
if (boolDriveIsReady == true)
{
    boolDriveIsReady = false;
    DirectoryInfo di = new DirectoryInfo(strDriverLetter);
    FileInfo[] exFiles = di.GetFiles("*.exe");
    foreach (FileInfo fi in exFiles)
    {
        Console.WriteLine("File Name: " + fi.Name + "Extension "+ fi.Extension);
        if (fi.Name.ToUpper().Equals("LAUNCH.EXE"))
        {                        
            boolDriveIsReady = true;
            break;
        }
    }
}

Tuesday, May 25, 2010

How To: Get File Time [C#]

To get file time information like attributes and all or when any file was created, last modified or accessed. For getting this you can get file DateTime info by using either static methods of File class or instance methods of FileInfo class.

Get file times using File class

Use File class when you want to get just one specific time, for example if you are only interested in a file last modification time. To do this use static method File.GetLastWri teTime with file path as a parameter. File class also provides static methods to get file creation time or file last access time. You can also get this times in UTC, e.g. to get file last write time in UTC use File.GetLastWri teTimeUtc.

// local times
DateTime creationTime = File.GetCreationTime(@"c:\Demo.txt");
DateTime lastWriteTime = File.GetLastWriteTime(@"c:\Demo.txt");
DateTime lastAccessTime = File.GetLastAccessTime(@"c:\Demo.txt");
// UTC times
DateTime creationTimeUtc = File.GetCreationTimeUtc(@"c:\Demo.txt");
DateTime lastWriteTimeUtc = File.GetLastWriteTimeUtc(@"c:\Demo.txt");
DateTime lastAccessTimeUtc = File.GetLastAccessTimeUtc(@"c:\Demo.txt");
// write file last modification time (local / UTC)
Console.WriteLine(lastWriteTime);     // 5/25/2010 10:10:00 PM
Console.WriteLine(lastWriteTimeUtc);  // 5/25/2010 10:10:00 PM


Get file times using FileInfo class



Use instance of  FileInfo class when you want to get more than one file time or any other information's about the file (like file attributes). Advantage is that you will get all needed information's just in one disk access. See following example.



FileInfo fileInfo = new FileInfo(@"c:\Demo.txt");
// local times
DateTime creationTime = fileInfo.CreationTime;
DateTime lastWriteTime = fileInfo.LastWriteTime;
DateTime lastAccessTime = fileInfo.LastAccessTime;
// UTC times
DateTime creationTimeUtc = fileInfo.CreationTimeUtc;
DateTime lastWriteTimeUtc = fileInfo.LastWriteTimeUtc;
DateTime lastAccessTimeUtc = fileInfo.LastAccessTimeUtc;
// write file last modification time (local / UTC)
Console.WriteLine(lastWriteTime);     // 5/25/2010 10:10:00 PM
Console.WriteLine(lastWriteTimeUtc);  // 5/25/2010 10:10:00 PM


Hope this is useful.

Using SortedList for FileWatcher

I need to do an update and archive files based on a condition in my application. So i have used sortedList to get all the files by processing the thread in my service. For details check my last post on this Multi Threading Using parameters for reference.

So I have updated on of my method DoTXT to achieve this from my previous post.

/// <summary>
        /// Thread 2, Displays that we are in thread 2
        /// </summary>
        public void DoTXT()
        {
            while (_stopThreads == false)
            {
                lock (this)
                {
                    // Write your TXT LOGIC HERE, Moving files and updating database etc
                    Console.WriteLine("Display Thread 2 " + strExt);
                    _threadOutput = "Hello Thread 2";
                    Thread.Sleep(1000);  // simulate a lot of processing
                    string[] Files = Directory.GetFiles("D://ThreadSample//Files//");
                    SortedList sList = new SortedList();
                    if (Files.Length > 0)
                    {
                        foreach (string s in Files)
                        {
                            try
                            {
                                if (Path.GetExtension(s).ToUpper().Equals(strExt))
                                {
                                    try
                                    {
                                        // if you date falls between two dates you need to change the condition while comparing.
                                        // Check the File class for rest of useful methods you require..File.GetLastAccessTime
                                        if (File.GetLastWriteTime(s).ToShortDateString().Equals(strDateTime))
                                        {
                                            DateTime dt = File.GetLastWriteTime(s);
                                            sList.Add(dt, Path.GetFullPath(s));
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        throw ex;
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                throw ex;
                            }
                        }
                        // Getting information from the SortedList.
                        foreach (string filename in sList.Values)
                        {
                            // Get all these file to zip for archive
                            Console.WriteLine("filename with sorted list." + filename);
                            // Do the db logic..
                        }
                    }
                    // we are in thread #2
                    Console.WriteLine("DoTXT Output --> {0}", _threadOutput + " datetime: -- > " + strDateTime);
                }
            }
        }