فشل نسخ النظام () بينما تعمل نسخة cmd
سؤال
في cmd.exe، يمكنني تنفيذ الأمر "copy c:\hello.txt c:\hello2.txt" وكان يعمل بشكل جيد.لكن في برنامج C الخاص بي، قمت بتشغيل هذا الجزء من التعليمات البرمجية وحصلت على الخطأ التالي:
#include <iostream>
using namespace std;
int main()
{
system("copy c:\hello.txt c:\hello2.txt");
system("pause");
return 0;
}
انتاج:لا يمكن للنظام العثور على الملف المحدد.
هل يعرف أحد ما الذي يحدث هنا؟
المحلول
داخل سلاسل C (وعدد لا بأس به من اللغات الأخرى التي تستخدم نفس قواعد الهروب)، \
يجب ان يكون \\
لأنها شخصية الهروب.يسمح لك بإدخال أحرف غير قابلة للطباعة في النص العادي مثل:
- حرف علامة التبويب
\t
. - حرف العودة
\r
. - حرف السطر الجديد
\n
. - وغيرها والتي لن أغطيها بالتفصيل.
منذ \
يستخدم كحرف الهروب، ونحن بحاجة إلى وسيلة لوضع فِعلي '\'
في سلسلة.ويتم ذلك مع التسلسل \\
.
لذلك يجب أن يكون خطك:
system("copy c:\\hello.txt c:\\hello2.txt");
قد يؤدي هذا أحيانًا إلى أخطاء غامضة باستخدام أوامر مثل:
FILE *fh = fopen ("c:\text.dat", "w");
أين ال \t
هو في الواقع tab
الحرف والملف الذي تحاول فتحه هو:
ج:فاتورة غير مدفوعةهسر.دأر.
نصائح أخرى
وبدلا من ذلك، فإن جميع وظائف ويندوز تدعم مائلة على غرار يونكس
system("copy c:/hello.txt c:/hello2.txt");
وبعض الناس يفضلون هذا لأنه من الأسهل على الفور غير مألوف '\'.
ولكن قد يربك مستخدمي ويندوز إذا قمت بعرض هذا المسار في رسالة.