2013-03-28 5 views
6

के कारण पूरा नहीं हो सका, संरचना में 4000000 से अधिक जेपीईजी फाइलें प्राप्त करने के बाद हमें नई जोड़ने में समस्या है। फ़ाइल.कॉपी एक अपवाद फेंक दें: अनुरोधित ऑपरेशन फ़ाइल सिस्टम सीमा के कारण पूरा नहीं हो सका।फ़ाइल.कॉपी त्रुटि: अनुरोधित ऑपरेशन फ़ाइल सिस्टम सीमा

कोई समाधान?

जानकारी

कोड

public bool AddFile(Uri uri, string path, bool withDelete = false) 
    { 
     var sourceFilePath = path; 
     var destinationFilePath = Path.GetFullPath(uri.LocalPath); 

     try 
     { 
      if (!File.Exists(sourceFilePath)) 
      { 
       sourceFilePath = Directory.EnumerateFiles(sourceFilePath).FirstOrDefault(); 
       destinationFilePath = Path.Combine(destinationFilePath, Path.GetFileName(sourceFilePath)); 
      } 

      if (!Directory.Exists(Path.GetDirectoryName(destinationFilePath))) 
       Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath)); 

      if (withDelete && File.Exists(destinationFilePath)) 
       File.Delete(destinationFilePath); 

      File.Copy(sourceFilePath, destinationFilePath); 

      return true; 
     } 
     catch (Exception exc) 
     { 
      ServiceCore.GetLogger().Error(exc); 
      throw exc; 
     } 
    } 

स्टैकट्रेस

2013-03-28 14:10:48.3784[Info]: 47356388:Unive.NetService.SimpleServices.DocumentManagementSerivce..ctor: Entry 
    2013-03-28 14:10:48.4740[Info]: Static:Unive.NetService.SimpleServices.DocumentManagementSerivce..ctor: Success 
    2013-03-28 14:10:48.4899[Info]: 47356388:Unive.NetService.SimpleServices.DocumentManagementSerivce.UploadFile: Entry 
    2013-03-28 14:11:26.3277[Error]: Exception 
    Message:The requested operation could not be completed due to a file system limitation 

    Source:mscorlib 
    Stack Trace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
     at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite) 
     at Unive.NetService.Business.SimpleFileClient.AddFile(Uri uri, String path, Boolean withDelete) in D:\Tag Prografix\Unive.NetService\Business\SimpleFileClient.cs:line 33 
    TargetSite:Void WinIOError(Int32, System.String) 
    2013-03-28 14:11:26.5029[Error]:       47356388:Unive.NetService.SimpleServices.DocumentManagementSerivce.UploadFileException 
    Message:The requested operation could not be completed due to a file system limitation 

    Source:mscorlib 
    Stack Trace: at Unive.NetService.Business.SimpleFileClient.AddFile(Uri uri, String path, Boolean withDelete) in D:\Tag Prografix\Unive.NetService\Business\SimpleFileClient.cs:line 42 
     at Unive.NetService.Business.FileService.UploadFile(Int64 fileId, String fileName, String path, Boolean isDiagram) in D:\Tag Prografix\Unive.NetService\Business\FileService.cs:line 80 
     at Unive.NetService.SimpleServices.DocumentManagementSerivce.UploadFile(Int64 fileId, String fileName, String path) in D:\Tag Prografix\Unive.NetService\SimpleServices\DocumentManagementSerivce.asmx.cs:line 100 
    TargetSite:Void WinIOError(Int32, System.String) 
+0

यह एक संभावना है: http://blogs.technet.com/b/seanearp/archive/2011/07/06/file-system-limitation.aspx –

+9

http://stackoverflow.com/questions/197162/ एनटीएफएस-प्रदर्शन-और-बड़े-वॉल्यूम-ऑफ-फाइल-एंड-डायरेक्टरीज/2 9 12 9 2 # 2 9 12 9 2 (_ "फिर या तो" _ आपके लिए है) –

उत्तर

2

आप को विभाजित करने और अपने निर्देशिका विभाजित समस्याओं से बचने के चाहिए। विंडोज़ लाखों फाइलों के साथ निर्देशिका पसंद नहीं है।

इस समस्या से बचने के लिए, मेरी फ़ाइलों को हमेशा डीबी पंक्ति आईडी (जो एक guid है) के साथ नामित किया जाता है।
और फिर GUID के प्रत्येक भाग एक निर्देशिका, पिछले एक को छोड़कर है: आईडी 02510b5a-a605-4a4e-b00a-f554998378a9 साथ फ़ाइल निर्देशिका 02510b5a/a605/4a4e/b00a में संग्रहीत/और नाम f554998378a9 है है। तो मैं सीधे आईडी का उपयोग कर फ़ाइल तक पहुंच सकता हूं, और कई निर्देशिकाओं में लाखों फाइलें विभाजित हैं।

संपादित करें: बस एक टिप्पणी के बाद से मैं यहां पोस्ट मैं अपने समाधान के बारे में नोटिस: .NET Guid में उत्पन्न कर रहे हैं ताकि बहुत बार पहले भाग में परिवर्तन, और अंतिम भाग नहीं इतनी बार (या शायद ही कभी)। ऊपर वर्णित विभाजन के रूप में बहुत सी स्तर की निर्देशिका का नेतृत्व किया जाता है, फिर प्रत्येक उपनिर्देशिका आदि में केवल 1 उपनिर्देशिका है। इसलिए यह अभी भी बहुत पहले स्तर की निर्देशिकाएं बनाते हैं और आप सिस्टम सीमा तक भी पहुंच सकते हैं (मुझे नहीं पता कि कहां है सीमा, लेकिन विंडोज निश्चित रूप से एक ही निर्देशिका में 4 000 000 उपनिर्देशिकाएं नहीं लेना चाहेंगे)

समाधान: समाधान बनाने के दौरान समाधान ग्रिड भागों में वापस जाना है।

उदाहरण: के लिए इस Guid 02510b5a-a605-4a4e-b00a-f554998378a9 आप निर्देशिका f554998378a9\b00a\4a4e\a605 और फ़ाइल नाम का उपयोग करना चाहिए 02510b5a

, इसलिए यदि आप एक पाश में Guid के लाखों बनाने के बारे में पता है कि नेट Guid वर्तमान समय का उपयोग कर उत्पन्न कर रहे हैं हो सकता है वे करेंगे सब दिखता है वैसे ही (केवल पहला भाग अलग होगा) और मेरे समाधान का उपयोग कर उसी निर्देशिका में समाप्त होता है।

+0

मैंने पोस्ट किए जाने के बाद से एक संभावित समस्या के लिए अपना समाधान संपादित किया है – Fabske

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