باستخدام شجيتسبيالفولدرباث + مجلد فرعي مع شفيلوبيراتيون

StackOverflow https://stackoverflow.com//questions/11653089

  •  11-12-2019
  •  | 
  •  

سؤال

أريد حذف المجلد C:\Users\username\AppData\Roaming\appname عندما يقوم المستخدمون بإلغاء تثبيت التطبيق appname.

أولا ، أستخدم الكود التالي للحصول على المسار C:\Users\username\AppData\Roaming:

TCHAR dir[MAX_PATH];
dir[0] = '\0';
BOOL ok = SHGetSpecialFolderPath(NULL, dir, CSIDL_APPDATA, TRUE);

يتم تعريف اسم التطبيق على أنه _T("appname")

السؤال الأول هو: How to append "appname" to "dir"?

لنفترض أن ما سبق قد تم.ثم أحتاج إلى استخدام SHFileOperation لحذف المجلد غير الفارغ C:\Users\username\AppData\Roaming\appname.لذلك أنا بحاجة إلى سلسلة مزدوجة فارغة إنهاء في SHFILEOPSTRUCT هيكل.لذا

How to get a double null-terminated string from the result of the first step? Just append _T("\0\0") to it?

تحديث:يمكنني استخدام TCHAR *dir2 = lstrcat(dir, appname); للحصول على المسار.ولكن عندما حاولت استخدام TCHAR *dir3 = lstrcat(dir2, _T("\0\0"));, ، لا يتم حذف المجلد.أي عدد من \0 لن ينجح.


ملاحظة:

إذا كنت تفعل ما يلي مباشرة ، حصلت عليه للعمل.المشكلة هي أنني أريد أن تكون مستقلة عن المستخدم.

TCHAR path[] = _T("C:\\Users\\username\\AppData\\Roaming\\appname");
memcpy(path + sizeof(path) / sizeof(TCHAR) - 1, _T("\0\0\0"), 3);
هل كانت مفيدة؟

المحلول

لإلحاق المسارات انظر باثابند وظيفة.

TCHAR dir[MAX_PATH] = {0};

BOOL ok = SHGetSpecialFolderPath(NULL, dir, CSIDL_APPDATA, TRUE);

PathAppend(dir, _T("appname"));

إذا كنت تريد ضمان إنهاء فارغة مزدوجة من دير متغير:

dir[MAX_PATH - 1] = 0;
dir[MAX_PATH - 2] = 0;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top