2011-06-21 6 views
6

मैं सी # में एक छोटा प्रोग्राम लिख रहा हूं जो फ़ोल्डर को स्कैन करता है और प्रोग्राम पर बटन दबाए जाने के बाद 5.30 बजे के बाद बनाई गई फ़ाइलों को खोलता है । इसे उप-फ़ोल्डर में भी खोजना होगा।सी # एक फ़ोल्डर को स्कैन करें और एक निश्चित समय के बाद बनाई गई फ़ाइलों को खोलें

मुझे सही दिशा में इंगित करने के लिए मुझे कुछ समाधानों की आवश्यकता है क्योंकि मुझे यकीन नहीं है कि मैं यह कैसे करूंगा।

यह फ़ोल्डर वॉचर प्रोग्राम का हिस्सा है। समस्या यह है कि जब उपयोगकर्ता घर जाता है तो पीसी बंद हो जाता है और 17.30 के बाद निर्देशिका में फाइलें बनाई जा रही हैं। तो मुझे सुबह में प्रोग्राम को फिर से शुरू करने के लिए एक तरीका चाहिए, यह 17.30 के बाद बनाई गई किसी भी चीज़ का पता लगाता है और उन्हें खोलता है।

private void button1_Click(object sender, EventArgs e) 
    { 
     folderBrowser.ShowDialog(); 

     textBox1.Text = folderBrowser.SelectedPath; 
     filewatcher.Path = textBox1.Text; 
     Registry.SetValue("HKEY_CURRENT_USER\\SOFTWARE\\COMPANY\\FOLDERWATCHER", "FOLDERPATH", textBox1.Text); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     String WatchFolder = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\COMPANY\\FOLDERWATCHER", "FOLDERPATH", "").ToString(); 

     textBox1.Text = WatchFolder; 
     filewatcher.Path = WatchFolder; 
    } 

    private void Form1_Resize(object sender, EventArgs e) 
    { 
     if (WindowState == FormWindowState.Minimized) 
     { 
      ShowInTaskbar = true; 
      Hide(); 
     } 
    } 

    private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e) 
    { 
     if(!e.FullPath.EndsWith("temp.temp")) 
     { 
      MessageBox.Show("You have a Collection Form: " + e.Name); 
      Process.Start("explorer.exe", e.FullPath); 
     } 
    } 

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) 
    { 
     Show(); 
    } 
} 

यह मेरा पूरा कोड ऊपर है। मैं 17.30 के बाद बनाई गई फ़ाइलों को खोलने या दिखाने के लिए एक बटन का उपयोग करना चाहता हूं।

उत्तर

19

सिस्टम.आईओ नेमस्पेस पर देखें, इसमें आपकी हर चीज है।

निर्देशिकाइन्फो और फ़ाइल कक्षाएं जो आप चाहें वह करेंगे।

+1

FileInfo/Directory.CreationTime अधिक सटीक होने के लिए: http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.creationtime.aspx और http://msdn.microsoft.com/en-us /library/system.io.filesysteminfo.creationtime.aspx – RvdK

+2

@PoweRoy: ठीक है, मैं इसे उसके लिए आसान बनाना नहीं चाहता था;) –

+3

तो एसओ आपके लिए होमवर्क करने के लिए बहुत अधिक जगह है। कम से कम, मुझे यह महसूस हो रहा है जब मैं इनमें से कुछ प्रश्नों (एकल-अंकों वाले प्रतिनिधि वाले लोगों) को देखता हूं। – dpurrington

3

आप बटन दबाए जाने के बाद बनाए गए फ़ाइलों का पता लगाने के लिए FileSystemWatcher (MSDN documentation) का उपयोग कर सकते हैं (जबकि आपका एप्लिकेशन चल रहा है)।

FileSystemWatcher watcher = new FileSystemWatcher(); 
watcher.Path = "C:\\YourDirectory"; 
watcher.Created += (sender, args) => { 
    // File was created 
} 
watcher.EnableRaisingEvents = true; 

इससे आपको फ़ाइलों को ट्रैक करने की अनुमति मिलती है (जब आपका एप्लिकेशन चल रहा है)।

यदि आप बस निर्दिष्ट समय सीमा (आपके आवेदन शुरू होने से पहले) में बनाई गई सभी निर्देशिकाओं की एक सूची प्राप्त करना चाहते हैं, तो आप Directory.GetDirectories और Directory.GetFiles का उपयोग कर निर्देशिका पेड़ खोज सकते हैं।

+3

वास्तविक समय में बदलाव लाने का यह सही तरीका है, लेकिन उसका सवाल लगता है कि उसे ऐतिहासिक रूप से बनाम वास्तविक समय की आवश्यकता है। – Nix

+0

हाय डायरेक्टरी। गेटडायरेक्टरीज और डायरेक्टरी। गेटफाइल जो मैं ढूंढ रहा हूं वह प्रतीत होता है। – Matt

1

डेटाटाइम स्थान की तिथि और समय मूल्य के स्थान पर।

public static List<string> GetFilesCreatedAfter(string directoryName, DateTime dt) 
{ 
    var directory = new DirectoryInfo(directoryName); 
    if (!directory.Exists) 
     throw new InvalidOperationException("Directory does not exist : " + directoryName); 
    var files = new List<string>(); 
    files.AddRange(directory.GetFiles().Where(n => n.CreationTime > dt).Select(n=>n.FullName)); 
    foreach (var subDirectory in Directory.GetDirectories(directoryName)) 
    { 
     files.AddRange(GetFilesCreatedAfter(subDirectory,dt)); 
    } 
    return files; 
} 

आशा मैं मदद की:

void DirSearch(string dir) 
{ 
    try 
    { 
     foreach (string d in Directory.GetDirectories(dir)) 
     { 
      foreach (string f in Directory.GetFiles(d, "*.*")) 
      { 
       if(DateTime.Compare(f.GetCreationTime, datetime)) 
       { 
        //files found    
       } 
      } 
      DirSearch(d); 
     } 
    } 
    catch (System.Exception excpt) 
    { 
     Console.WriteLine(excpt.Message); 
    } 
} 
5

यहाँ पुनरावर्ती विधि आप के लिए देख रहे हैं।

+0

जानकारी के लिए धन्यवाद, मैं इसे एक बटन का उपयोग करके कैसे लिख सकता हूं। – Matt

+0

अपने बटन के क्लिक ईवेंट के ईवेंट हैंडलर में, वांछित निर्देशिकापैथ और डेटटाइम के साथ इस विधि को कॉल करें। यानी 'var files = GetFilesCreatedAfter (फ़ोल्डर ब्रोसर।चयनित पाथ, नया डेटटाइम (2011,06,24,17,30,0)); ' –

संबंधित मुद्दे