2012-06-05 1 views
5

C#에서 파일 편집기를 만들었으며 툴바에서 '열기'버튼을 사용하여 파일을 열 수 있으며 올바른 파일 유형을 프로그램에 연결했기 때문에 확장명을 가진 파일을 클릭 할 때 * .nlp 프로그램은 제대로 열리지 만 파일 자체는 열지 않습니다. (아직 구현하지 않았기 때문에 꽤 논리적입니다)연관이있는 파일 열기

이제는 어떻게해야할까요? 파일을 클릭하면 열리고로드되기를 원합니다.

은 (BTW, 파일은 일반 텍스트, 특별 아무것도, 그리고 그 중요한 경우는 Windows 용입니다)

+0

어떻게 당신은 당신의 프로그램으로 파일 형식을 연결 했습니까? – gideon

+0

방금 ​​클릭 한 다음 ..로 열었습니다. 내 exe를 선택했습니다. – Nick

+0

[명령 줄] (http://msdn.microsoft.com/en-us/library/system.environment)에서 간단히 읽으면 알 수 있습니다. 명령 행). –

답변

4

Windows에서 파일 연결은 아래 레지스트리에 저장되고 관리됩니다 HKEY_CLASSES_ROOT

다음 작업을 수동으로 수행하거나 약간의 설치 프로그램을 사용하여 올바른 항목을 레지스트리에 기록 할 수 있습니다.

확장 프로그램을 등록한 다음 this document이 설명하는 프로그램과 연결해야합니다. 또한 this doc 레지스트리는 다음과 같이한다 참조 :

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

지금이, 당신의 대답에들이 키는 명령 키에 %1입니다. 이라는 파일 이름이 열렸습니다.이 파일은 앱으로 전달됩니다.

그래서 :

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

가 직접 관리하는 파일 연결을위한 닷넷 API로 표시되지 않습니다하지만 당신은 사용할 수 있습니다 필요한 키를 읽고 쓰는 레지스트리 클래스.

HKEY_CLASSES_ROOT 아래에 파일 확장명 (예 : ".txt")으로 설정된 이름으로 키를 만들어야합니다. 이 키의 기본값을 파일 형식의 고유 한 이름 (예 : "Acme.TextFile")으로 설정하십시오. 그런 다음 이름이 "Acme.TextFile"로 설정된 HKEY_CLASSES_ROOT 아래에 다른 키를 만듭니다. "DefaultIcon"이라는 하위 키를 추가하고이 파일 유형에 사용할 아이콘이 포함 된 파일의 키 기본값을 설정하십시오. "쉘"이라는 다른 형제를 추가하십시오. "쉘"키 아래에 탐색기 컨텍스트 메뉴를 통해 사용할 수있는 각 동작에 대한 키를 추가하고 각 키의 기본값을 실행 파일의 경로와 공백으로 설정하고 경로를 나타내는 "% 1"을 추가하십시오 선택한 파일로 이동하십시오.

예를 들어

, 여기가 .txt 파일과 엠 에디터 간의 연관 생성하기 위해 샘플 레지스트리 파일입니다 :

Windows 레지스트리 편집기 버전 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\"" 

신용에 @ X-삼승

2

filename이 애플리케이션의 인수로 전달됩니다.

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