سؤال

من Java ، أقوم باستخراج قابلة للتنفيذ في موقع محدد باستخدام file.createTempFile (). عندما أحاول تشغيل برنامجي القابل للتنفيذ ، يتم تعليق برنامجي عندما يحاول قراءة السطر الأول من الإخراج.

لقد اكتشفت أنه إذا حاولت تشغيل نفس الاستخراج القابل للتنفيذ من برنامج آخر ، فهذا يعمل إذا قمت بتحديد الدليل كـ C: Documents and Settings Username Local Settings temp prog.exe. ولكن إذا قمت بتحديد الدليل على أنه C: docume ~ 1 userna ~ 1 FOCALS ~ 1 temp prog.exe أحصل على تعليق.

هل هناك طريقة لإلغاء توصيل اسم ملف Tilde في برنامجي حتى أتمكن من تحديد اسم الدليل الذي يعمل؟

(وبما أنني أحب دائمًا معالجة قضايا تصميم اللغة وواجهة برمجة التطبيقات (API) ، هل هناك أي سبب يجعل java file.createTempfile () و java.io.tmpdir يجب على تقييم أسماء الملفات المشوهة؟)

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

المحلول

يمكنك استخدام getCanonicalPath() للحصول على المسار الموسع. على سبيل المثال:

try
{
  File file = File.createTempFile("abc", null);
  System.out.println(file.getPath());
  System.out.println(file.getCanonicalPath());
}
catch (IOException e) {}

... ينتج عنه ...

C:\DOCUME~1\USERNA~1\LOCALS~1\Temp\abc49634.tmp
C:\Documents and Settings\username\Local Settings\Temp\abc49634.tmp

لقد اختبرت هذا على XP ، لكنني افترض أنه سيعمل بشكل مشابه على أنظمة تشغيل Windows الأخرى.

انظر إجابة @Raviaw على سؤالك الثاني.

نصائح أخرى

واو ، لم أر ذلك أبدًا. والحقيقة هي أن البيئة المتغيرة ٪ temp ٪ يعيد اسم مشوهة (هذا من جهاز الكمبيوتر الخاص بي):

TEMP=C:\DOCUME~1\raviw\LOCALS~1\Temp
TMP=C:\DOCUME~1\raviw\LOCALS~1\Temp

على افتراض أن إنشاء Java VM حديثًا يستخدم متغير البيئة للحصول على موقع المجلد المؤقت ، فإنه ليس خطأ VM أن الدلائل قادمة.

وحتى إذا حاولت استخدام system.getenv () للحصول على المجلد المؤقت ، سيظل لديك نفس المشكلة.

أود أن أتأكد من:

  • لا تنجم المشكلة عن حقيقة أن لديك دليلًا يسمى "prog.exe" (بناءً على سؤالك ، أفترض هذا) ؛
  • إذا كان الملف "prog.exe" ، إذا لم يكن قيد الاستخدام من قبل أي برنامج آخر (مضاد للفيروسات ، ربما) ؛
  • التحقق مما إذا كان جهاز الكمبيوتر الخاص بك عاقلًا (سيكون هذا خطأً مهمًا جدًا لأي تطبيق ليس تطبيقًا ويب ويحتاج إلى ملفات مؤقتة).
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top