2012-06-05 20 views
5

hice un editor de archivos en C#, y puedo abrir archivos usando el botón 'Abrir' en la barra de herramientas, también asocié los tipos de archivos correctos al programa, así que cuando hago clic en un archivo con la extensión * .nlp el programa se abre correctamente, pero no abre el archivo en sí (lo cual es bastante lógico ya que no lo implementé)Abrir archivo con asociación

ahora es mi pregunta, ¿cómo implemento tal cosa? Quiero que el archivo se abra y cargue cuando haga clic en él.

(por cierto, el archivo es sólo texto plano, así que nada especial, y es para Windows si lo que importa)

+0

¿Cómo se asocia el tipo de archivo con su programa? – gideon

+0

acabo de hacer clic en él, y abrí con .. y seleccioné mi exe – Nick

+0

Supongo que simplemente leerá desde [la línea de comandos] (http://msdn.microsoft.com/en-us/library/system.environment. línea de comando). –

Respuesta

4

En Windows, las asociaciones de archivos se almacenan y administran en el registro en HKEY_CLASSES_ROOT

Puede hacer lo siguiente de forma manual o eventualmente escribir un pequeño programa de instalación para escribir las entradas correctas en el registro.

Debe registrar su extensión y luego asociarla con un programa como this document describe. También ver this doc Su registro debe tener este aspecto:

HKEY_CLASSES_ROOT 
    .nlp 
     (Default) = YourProgID//can by anything you want 
    YourProgID 
     shell 
     open 
      command 
       (Default) = yourapp.exe %1 

Ahora, clave para que su respuesta es la %1 en la tecla de comando. Es el nombre de archivo que se abrió y pasó como un argumento para su aplicación.

Así:

static void Main(string[] args) 
{ 
    // args will contain your filename 
} 
2

No parece ser una API de .NET para la gestión de las asociaciones de archivos directamente, pero se puede utilizar las clases de registro para leer y escribir las claves que necesita.

Tendrá que crear una clave en HKEY_CLASSES_ROOT con el nombre establecido en su extensión de archivo (por ejemplo: ".txt"). Establezca el valor predeterminado de esta clave en un nombre único para su tipo de archivo, como "Acme.TextFile". Luego crea otra clave bajo HKEY_CLASSES_ROOT con el nombre establecido en "Acme.TextFile". Agregue una subclave llamada "DefaultIcon" y establezca el valor predeterminado de la clave para el archivo que contiene el icono que desea usar para este tipo de archivo. Agregue otro hermano llamado "shell". Debajo de la tecla "shell", agregue una clave para cada acción que desee tener disponible a través del menú contextual de Explorer, establezca el valor predeterminado para cada tecla en la ruta al ejecutable seguido de un espacio y "% 1" para representar la ruta al archivo seleccionado.

Por ejemplo, aquí hay un archivo de registro de ejemplo para crear una asociación entre los archivos .txt y EmEditor:

Editor de Registro de Windows versión 5,00

[HKEY_CLASSES_ROOT\.txt] 
@="emeditor.txt" 

[HKEY_CLASSES_ROOT\emeditor.txt] 
@="Text Document" 

[HKEY_CLASSES_ROOT\emeditor.txt\DefaultIcon] 
@="%SystemRoot%\\SysWow64\\imageres.dll,-102" 

[HKEY_CLASSES_ROOT\emeditor.txt\shell] 

[HKEY_CLASSES_ROOT\emeditor.txt\shell\open] 

[HKEY_CLASSES_ROOT\emeditor.txt\shell\open\command] 
@="\"C:\\Program Files\\EmEditor\\EMEDITOR.EXE\" \"%1\"" 

[HKEY_CLASSES_ROOT\emeditor.txt\shell\print] 

[HKEY_CLASSES_ROOT\emeditor.txt\shell\print\command] 
@="\"C:\\Program Files\\EmEditor\\EMEDITOR.EXE\" /p \"%1\"" 

crédito a @ X-Cubed

2

El El nombre del archivo se transmitirá como argumento a su aplicación:

public static void Main(string[] args) 
{ 
    if (args != null && args.Length > 0) 
    { 
    string filename = args[0]; 
    if (File.Exists (filename)) 
    { 
     //Open file 
    } 
    } 
} 
Cuestiones relacionadas