2012-11-29 26 views
9

में फ़ाइलों को ले जाएं मैं कुछ छवियों को स्थानांतरित कर रहा हूं (फ़ाइल नाम (1) पीएनजी, (2) पीएनजी और इतने पर) एक निर्देशिका से दूसरे में। मैं निम्नलिखित कोड का उपयोग कर रहा:सी #

for (int i = 1; i < n; i++) 
{ 
    try 
    { 
     from = "E:\\vid\\(" + i + ").PNG"; 
     to = "E:\\ConvertedFiles\\" + i + ".png"; 

     File.Move(from, to); // Try to move 
     Console.WriteLine("Moved"); // Success 
    } 
    catch (IOException ex) 
    { 
     Console.WriteLine(ex); // Write error 
    } 
} 

हालांकि, मैं निम्न त्रुटि हो रही है:

प्रकार System.IO.FileNotFoundException का एक पहला मौका अपवाद mscorlib.dll

System.IO.FileNotFoundException: Could not find file 'E:\vid\(1).PNG'. 

इसके अलावा में हुई, मैं कर रहा हूँ फ़ाइलों का नाम बदलने की योजना है ताकि परिवर्तित फ़ाइल नाम 00001.png, 00002.png ... 00101 और इसी तरह होगा।

+4

बेवकूफ सवाल, लेकिन आप सुनिश्चित हैं कि "ई: \ vid (1) .PNG" मौजूद है? – Rotem

+1

'फ़ाइल नहीं ढूंढ सका' ई: \ vid (1) .PNG'' लेकिन आपका कोड कहता है 'ई: \\ vid \\ (1) .png' - तो यहां कहीं भी एक स्लैश गायब है, नहीं? –

+0

कुछ गड़बड़ है: आपका कोड फ़ाइलों को '(_num _)। Png' नामित करने की अपेक्षा करता है और' E: \ vid' निर्देशिका में रहता है। त्रुटि संदेश बताते हैं कि आप 'e: \\' निर्देशिका में फ़ाइल 'vid (_num _)। Png' को "ढूंढ "ने का प्रयास कर रहे थे। तो त्रुटि संदेश और कोड मेल नहीं खाते हैं। कृपया सुनिश्चित करें कि आपने मिलान किया गया वास्तविक कोड और त्रुटि संदेश पोस्ट किया है। –

उत्तर

11

तरह @ जोड़ने मैं तुम्हें करने के लिए उपयोग करने के लिए सुझाव है '@' एक और अधिक पठनीय तरीके से स्लेश से बचें। अपने विनिर्देशों के रूप में अपने फ़ाइल नाम रखने के लिए पथ और PadLeft को संयोजित करने के लिए Path.Combine(...) का भी उपयोग करें।

for (int i = 1; i < n; i++) 
{ 
    try 
    { 
     from = System.IO.Path.Combine(@"E:\vid\","(" + i.ToString() + ").PNG"); 
     to = System.IO.Path.Combine(@"E:\ConvertedFiles\",i.ToString().PadLeft(6,'0') + ".png"); 

     File.Move(from, to); // Try to move 
     Console.WriteLine("Moved"); // Success 
    } 
    catch (IOException ex) 
    { 
     Console.WriteLine(ex); // Write error 
    } 
} 
1

अपवाद का अर्थ है कि फ़ाइल E:\vid(1).PNG मौजूद नहीं है। क्या आपका मतलब E:\vid1.PNG है?

पथ बनाने के लिए System.IO.Path कक्षा का उपयोग करें, यह तारों को संयोजित करने से बेहतर है। बैकस्लाश से बचने के बारे में आपको चिंता करने की ज़रूरत नहीं है।

1
i.ToString() 

आपकी मदद कर सकता है। आप

from = "E:\\vid\\(" + i + ").PNG"; 
to = "E:\\ConvertedFiles\\" + i + ".png"; 

गुजर रहे हैं मैं के रूप में पूर्णांक और संयोजन के बजाय \\ का उपयोग करने का है कि
कारण और काम नहीं करता है, इस

from = @"E:\vid\(" + i + ").PNG"; 
+2

'स्ट्रिंग के साथ contcatenating जब 'ToString()' को स्पष्ट रूप से बुलाया जाता है। अगर यह समस्या थी, तो उसका कोड भी संकलित नहीं होगा। – Rotem

+0

उस के लिए आमीन। सच –

3

आप ऐसा कुछ क्यों नहीं करते?

var folder = new DirectoryInfo(@"E:\vid\")); 

if (folder.Exists) 
{ 
    var files = folder.GetFiles(".png"); 
    files.toList().ForEach(f=>File.Move(from,to)); 
} 
1

मैंने इसे विजुअल स्टूडियो में अभी चलाया। इसने काम कर दिया।

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 


namespace ConsoleApplication2 

{ 

    class Program 
    { 
     static void Main() 
     { 
      int n = 3; 
      for (int i = 1; i < n; i++) 
      { 
       string from = "C:\\vid\\(" + i + ").PNG"; 
       string to = "C:\\ConvertedFiles\\" + i + ".png"; 
       { 
        try 
        { 
         File.Move(from, to); // Try to move 
         Console.WriteLine("Moved"); // Success 
        } 
        catch (System.IO.FileNotFoundException e) 
        { 
         Console.WriteLine(e); // Write error 
        } 
       } 
      } 
     } 
    } 

} 

हो सकता है कि जब आप परीक्षा शुरू करने के vid निर्देशिका में फ़ाइलों जा रहे थे, खिड़कियां बंद कोष्टक के बाल काटे। (1) .png 1.png बन गया ... मुझे एक फ़ाइल मिली है जो उस घटना से त्रुटि नहीं मिली ... अन्यथा, आपका कोड ठोस है। मेरा संस्करण लगभग समान है।

0
var folder = new DirectoryInfo(sourcefolder); 

if (folder.Exists) 
{ 
    var files = folder.GetFiles("*.png"); 
    files.ToList().ForEach(f => File.Move(sourcefolder + f, newFolderName + f)); 
} 

मेरा मानना ​​है कि इससे मदद मिलेगी।