مشكلة في دقة المسار النسبي عند إعداد مصدر الصورة

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

سؤال

لقد قمت ببناء تطبيق WPF صغير يسمح للمستخدمين بتحميل المستندات ثم حدد واحد لعرضه.

ما يلي هو رمز نسخة الملف.

    
public static void MoveFile( string directory, string subdirectory)
{
    var open = new OpenFileDialog {Multiselect = false, Filter = "AllFiles|*.*"};
    var newLocation = CreateNewDirectory( directory, subdirectory, open.FileName);

    if ((bool) open.ShowDialog())
        CopyFile(open.FileName, newLocation);
    else
        "You must select a file to upload".Show();
}

private static void CopyFile( string oldPath, string newPath)
{
 if(!File.Exists(newPath))
  File.Copy(oldPath, newPath);
 else
  string.Format("The file {0} already exists in the current directory.", Path.GetFileName(newPath)).Show();
}
    

يتم نسخ الملف دون وقوع حادث. ومع ذلك، عندما يحاول المستخدم تحديد ملف يتم نسخه للتو لعرضه، لم يتم العثور على ملف استثناء. بعد تصحيح الأخطاء، لقد وجدت أن البهوث البحري للصورة الديناميكية تحل المسار النسبي "الملفات المحددة" إلى الدليل الذي تم تصفحه فقط بواسطة الملف حدد في التعليمات البرمجية أعلاه بدلا من دليل التطبيق كما يبدو أنه ينبغي.

تحدث هذه المشكلة فقط عند تحديد ملف نسخ حديثا. إذا قمت بإعادة تشغيل التطبيق وحدد الملف الجديد الذي يعمل بشكل جيد.

إليك التعليمات البرمجية التي تقوم بتعيين مصدر الصورة بشكل حيوي:

    
//Cover = XAML Image
Cover.Source(string.Format(@"Files\{0}\{1}", item.ItemID, item.CoverImage), "carton.ico");

...

public static void Source( this Image image, string filePath, string alternateFilePath)
{
    try
 {image.Source = GetSource(filePath);}
    catch(Exception)
 {image.Source = GetSource(alternateFilePath);}
}

private static BitmapImage GetSource(string filePath)
{
    var source = new BitmapImage();
    source.BeginInit();
    source.UriSource  = new Uri( filePath, UriKind.Relative);
    //Without this option, the image never finishes loading if you change the source dynamically.
    source.CacheOption = BitmapCacheOption.OnLoad;
    source.EndInit();
    return source;
}
    

أنا لاذع. سيكون موضع تقدير أية أفكار.

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

المحلول 2

اتضح أنني كنت أفتقد خيارا في منشئ بلدي Openfiledialogue. كان الحوار تغيير الدليل الحالي الذي يسبب المسارات النسبية لحلها بشكل غير صحيح.

إذا قمت باستبدال الملف المفتوح بما يلي:


var open = new OpenFileDialog{ Multiselect = true, Filter = "AllFiles|*.*", RestoreDirectory = true};

تم حل المشكلة.

نصائح أخرى

على الرغم من أنني لا أملك إجابة مباشرة، يجب عليك توخي الحذر لمثل هذا السماح للأشخاص بتحميل الملفات. كنت في ندوة حيث كان لديهم جيدة مقابل المتسللين السيئين لمحاكاة استغلال الحياة الحقيقية. كان أحد هذه الملفات قد تم تحديث الملفات المراد تحميلها. قاموا بتحميل ملفات ASP.NET الضارة وتسمى الملفات مباشرة لأنها جديدة حيث تم تقديم الصور في نهاية المطاف للمستخدمين، وتمكنوا من الاستفادة من نظام. قد ترغب في التحقق بطريقة ما يتم السماح بأي نوع من أنواع الملفات وربما تم تخزينها في دليل غير مؤشر لخادم الويب الخاص بك.

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