क्या वास्तव में इस निर्देशिका को घुमाने और इसमें प्रत्येक फ़ाइल का आकार जोड़ने के बिना निर्देशिका आकार/फ़ोल्डर आकार प्राप्त करने का कोई तरीका है? आदर्श रूप से कुछ लाइब्रेरी जैसे बूस्ट का उपयोग करना चाहते हैं लेकिन जीत एपीआई भी ठीक रहेगा।एक निर्देशिका का आकार
उत्तर
जहां तक मुझे पता है कि आपको इसे अधिकांश ऑपरेटिंग सिस्टम पर पुनरावृत्ति के साथ करना है।
आप boost.filesystem पर एक नज़र डाल सकते हैं, इस लाइब्रेरी में एक रिकर्सिव_डायरेक्टरी_इटरेटर है, फिर भी यह सिस्टम को फिर से जमा करने वाले सिस्टम पर फ़ाइल को फिर से चालू करेगा।
include <boost/filesystem.hpp>
int main()
{
namespace bf=boost::filesystem;
size_t size=0;
for(bf::recursive_directory_iterator it("path");
it!=bf::recursive_directory_iterator();
++it)
{
if(!bf::is_directory(*it))
size+=bf::file_size(*it);
}
}
पुनश्च: आप इस एक बहुत क्लीनर एसटीडी का उपयोग करके कर सकते हैं :: जमा होते हैं और एक लैम्ब्डा मैं सिर्फ CBA
मुझे नहीं लगता कि ऐसा ही कुछ है, कम से कम है कोई win32 एपीआई समारोह नहीं।
खिड़कियों के लिए Natively:
void DirectoryInfo::CalculateSize(std::string _path)
{
WIN32_FIND_DATAA data;
HANDLE sh = NULL;
sh = FindFirstFileA((_path+"\\*").c_str(), &data);
if (sh == INVALID_HANDLE_VALUE)
{
return;
}
do
{
// skip current and parent
if (std::string(data.cFileName).compare(".") != 0 && std::string(data.cFileName).compare("..") != 0)
{
// if found object is ...
if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
// directory, then search it recursievly
this->CalculateSize(_path+"\\"+data.cFileName);
} else
{
// otherwise get object size and add it to directory size
this->dirSize += (__int64) (data.nFileSizeHigh * (MAXDWORD) + data.nFileSizeLow);
}
}
} while (FindNextFileA(sh, &data)); // do
FindClose(sh);
}
मुझे पूरा यकीन है कि हमें गुणा करने की आवश्यकता है (MAXDWORD + 1)। असाइन किए गए मानते हैं: '(uint64_t) (data.nFileSizeHigh * ((uint64_t) MAXDWORD + 1)) –
आप फ़ाइलों को पार करना होगा। सही परिणाम प्राप्त करना मुश्किल है यदि पेड़ में हार्ड-लिंक या रिपर्स पॉइंट हैं। विवरण के लिए रेमंड चेन के blog post देखें।
ज़िलोग ने काफी अच्छा जवाब लिखा है, लेकिन मैं इसे समान लेकिन अलग तरीके से बनाउंगा।
मैं के साथ मेरी प्रकार परिभाषा फ़ाइल है:
typedef std::wstring String;
typedef std::vector<String> StringVector;
typedef unsigned long long uint64_t;
और कोड है:
uint64_t CalculateDirSize(const String &path, StringVector *errVect = NULL, uint64_t size = 0)
{
WIN32_FIND_DATA data;
HANDLE sh = NULL;
sh = FindFirstFile((path + L"\\*").c_str(), &data);
if (sh == INVALID_HANDLE_VALUE)
{
//if we want, store all happened error
if (errVect != NULL)
errVect ->push_back(path);
return size;
}
do
{
// skip current and parent
if (!IsBrowsePath(data.cFileName))
{
// if found object is ...
if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
// directory, then search it recursievly
size = CalculateDirSize(path + L"\\" + data.cFileName, NULL, size);
else
// otherwise get object size and add it to directory size
size += (uint64_t) (data.nFileSizeHigh * (MAXDWORD) + data.nFileSizeLow);
}
} while (FindNextFile(sh, &data)); // do
FindClose(sh);
return size;
}
bool IsBrowsePath(const String& path)
{
return (path == _T(".") || path == _T(".."));
}
यह यूनिकोड का उपयोग करता है और रिटर्न dirs में विफल रहा है, तो आपको लगता है कि चाहते हैं।
उपयोग कॉल करने के लिए:
StringVector vect;
CalculateDirSize(L"C:\\boost_1_52_0", &vect);
CalculateDirSize(L"C:\\boost_1_52_0");
लेकिन कभी नहीं पारित size
लगभग काम करता है, लेकिन 'IsBrowsePath'' फ़ंक्शन गायब है – ibell
- 1. कैश निर्देशिका का सीमा आकार
- 2. निर्देशिका में छवियों का आकार बदलें
- 3. मॉनीटरिंग विंडोज निर्देशिका आकार
- 4. एंड्रॉइड निर्देशिका आकार
- 5. डिस्क पर जावा निर्देशिका आकार?
- 6. आईफोन दस्तावेज़ निर्देशिका अधिकतम आकार
- 7. मैं पर्सफोर्स से निर्देशिका का आकार कैसे प्राप्त करूं?
- 8. एक पतली Whiteline जब छवि का आकार
- 9. एक रिकॉर्ड का आकार? एसक्यूएल
- 10. एक एमएफसी विंडो का आकार
- 11. एक ऐरे का आकार बदलना
- 12. एक संरचना सदस्य का आकार
- 13. एक निर्देशिका
- 14. एक निर्देशिका
- 15. सी ++ एक पीएनजी फ़ाइल (निर्देशिका में) का छवि आकार कैसे प्राप्त करें
- 16. सी # छवि का आकार बदलने का आकार फ़ाइल आकार
- 17. एक वर्चर (अधिकतम) चर का अधिकतम आकार
- 18. एक धारावाहिक शून्य मानों का आकार
- 19. एक न्यूमेरिक वेक्टर का आकार कैसे बदलें?
- 20. एक 3 डी सरणी का आकार बदलना
- 21. एक पॉलिमॉर्फिक ऑब्जेक्ट का आकार पता करें
- 22. गिंप - एक कैनवास का आकार बदलना
- 23. एक सरणी का आकार प्राप्त करना
- 24. एक एमएमएपी फ़ाइल का तेज़ आकार
- 25. एक निश्चित आकार का ढेर बनाना
- 26. एक खुली फ़ाइल वस्तु का आकार
- 27. "संग्रह एक निश्चित आकार का था" POCO
- 28. एक इटेबल ऑब्जेक्ट का आकार कैसे ढूंढें?
- 29. सी ++/एक 2d सदिश का आकार
- 30. सी #: एक निर्देशिका
शायद नहीं। यही कारण है कि 'राइट-क्लिक करें -> गुणों को चलाने के लिए बहुत लंबा समय लगता है ... – Mysticial
मुझे भी यह नहीं पता कि यह क्यों कम किया जाना चाहिए। यह एक बहुत ही वैध सवाल है। चलो दोस्तो। बहुत स्थानीयकृत? वास्तव में। –
मैं डाउनवॉट्स से सहमत नहीं हूं ... यह एक पूरी तरह से वैध सवाल है। – Mysticial