سؤال

وظيفة Windows API CopyFile لديه حجة BOOL bFailIfExists الذي يسمح لك بالتحكم في ما إذا كنت تريد الكتابة فوق الملف الهدف إذا كان موجودًا أم لا.

ال boost::filesystem copy_file لا تحتوي الدالة على مثل هذه الوسيطة، وسوف تفشل في حالة وجود الملف الهدف.هل هناك طريقة أنيقة لاستخدام وظيفة Boost_copy_file والكتابة فوق الملف الهدف؟أم أنه من الأفضل استخدام Windows API ببساطة؟النظام الأساسي المستهدف الحالي الخاص بي هو Windows، لكنني أفضل استخدام STL وتعزيزه حيثما أمكن ذلك للحفاظ على نظام التعليمات البرمجية الخاص بي مستقلاً.

شكرًا لك.

هل كانت مفيدة؟

المحلول

هناك ثالث التعداد وسيطة لcopy_file، Boost::filesystem::copy_option::overwrite_if_exists

copy_file(source_path,destination_path,copy_option::overwrite_if_exists);

نصائح أخرى

وحذار من دفعة :: copy_file مع copy_option :: overwrite_if_exists! في حالة وجود الملف الوجهة، ومن أصغر من المصدر، فإن وظيفة الكتابة فقط حجم الأول (from_file) بايت في الملف الهدف.

وعلى الأقل بالنسبة لي كان هذا التحذير منذ أن يفترض copy_option :: overwrite_if_exists يؤثر <م> الملفات وليس <م> المحتوى

واختبار ما إذا كان الملف الوجهة موجود الأولى وإذا لم ثم إزالته:

if (exists (to_fp))
    remove (to_fp);
copy_file (from_fp, to_fp);

وأو إذا كنت قلقا حول الملف تظهر بين الاختبار ونسخة ثم هل يمكن الكتابة إلى ملف مؤقت ومن ثم تسميته إلى الملف الوجهة.

<اقتباس فقرة>   

هل هناك طريقة أنيقة لاستخدام وظيفة دفعة copy_file والكتابة فوق الملف الهدف؟

وعلى ما يبدو ليس هناك API المباشر للقيام بذلك.

<اقتباس فقرة>   

وأم أنه من الأفضل لمجرد استخدام API ويندوز؟ بلدي الأساسي الهدف الحالي هو ويندوز، ولكن يفضل استخدام STL وتعزيز حيثما أمكن ذلك للحفاظ على منصة قانون بلدي مستقل.

ومن الوثائق:

<اقتباس فقرة>   

لقد تم قبول اقتراح، N1975، لتشمل Boost.Filesystem في التقرير الفني 2 من قبل لجنة المعايير ++ C. سوف المكتبة Boost.Filesystem البقاء في المواءمة مع اقتراح TR2 نظام الملفات لأنها تعمل في طريقها من خلال عملية TR2. نلاحظ، مع ذلك، أن مساحات ورأس تحبب يختلف بين Boost.Filesystem واقتراح TR2.

ما يشير بقوة إلى أن الخلاف مع boost::filesystem هو فكرة جيدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top