Pregunta

Tengo un programa que he escrito en C #, que carga una imagen con Image.FromFile, y se carga la imagen del éxito cada vez. Sin embargo, cuando se arrastra y coloca otro archivo en el archivo ejecutable, como le está dando el programa el argumento de línea de comandos del archivo, y el archivo no está en la misma carpeta que el ejecutable, el programa se bloquea porque dice que el camino a la archivo no existe, a pesar de que lo hace.

creo que al dejar caer un archivo en el archivo ejecutable, que está cambiando la trayectoria de TI de la carga de imágenes a partir de alguna manera. ¿Cómo puedo solucionar este problema?

¿Fue útil?

Solución

Su programa se inició con una Environment.CurrentDirectory diferente. Siempre asegúrese de cargar archivos con un nombre de ruta absoluta (es decir, No Image.FromFile uso ( "blah.jpg")).

Para obtener la ruta absoluta a un archivo que se almacena en el mismo directorio que el archivo EXE, se podría utilizar Application.StartupPath por ejemplo. O Assembly.GetEntryAssembly (). Ubicación si no usan Windows Forms.

Otros consejos

Depende de cómo se está iniciando el exterior archivo de arrastre de su aplicación. Si hace clic y arrastra un archivo desde el Explorador de Windows, el Nombre completo ruta absoluta se incluye en la caída. En este caso, el código siguiente muestra el nombre de archivo y realiza una gota del contenido del archivo en un cuadro de texto:

private void textBox1_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        e.Effect = DragDropEffects.Copy;
}

private void textBox1_DragDrop(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        var objPaths = (string[])(e.Data.GetData(DataFormats.FileDrop));
        if (objPaths != null && objPaths.Length > 0 && File.Exists(objPaths[0]))
        {
            MessageBox.Show(string.Format("Filename: {0}", objPaths[0]));
            using (TextReader tr = new StreamReader(objPaths[0]))
                textBox1.Text = tr.ReadToEnd();
        }
    }
}

Así que vamos a saber más acerca de su origen de arrastre. Lo más probable es que tendrá que modificar el origen de arrastrar la ruta absoluta, o de alguna manera determinar la ruta completa de la ruta relativa en los datos de arrastre.

Además, el programa nunca debe bloquearse debido a datos erróneos. Ya sea para comprobar las condiciones requeridas, o utilizar un bloque try / catch alrededor del código necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top