2012-06-13 4 views
1

Firefox에서 텍스트보기와 관련하여 매우 직접적인 질문이 있습니다. 내 응용 프로그램은 Firefox에서 볼 텍스트가 필요합니다. .txt 파일을 저장하고 Firefox에서 열면 브라우저 용 플러그인 중 하나에서 텍스트를 활용하고 필요한 작업을 수행 할 수 있습니다.Firefox에 일반 텍스트 보내기

임시 파일을 작성하고 텍스트를 작성한 다음 Firefox에서 파일을 열어이 작업을 수행했습니다. 문제는 Firefox에 피드가되면 해당 파일을 삭제해야합니다. 그래서이 파일들이 수백 개가없는 것입니다. 브라우저의 인수에 몇 가지 직선 텍스트를 전달할 수있는 정보를 찾을 수 없어 임시 파일 방법을 사용하고 있습니다.

어쨌든, 이것은 내가 지금 가지고있는 것이며, 내 File.Delete이 실제로 파일을 삭제하기 전에 Firefox를 볼 수 있음을 알 수 있습니다. 코드를 더 천천히 따라 가면 괜찮습니다.

아이디어가 있으십니까?

try 
{ 
    string fileName = Path.GetTempFileName(); 
    FileInfo fileInfo = new FileInfo(fileName); 
    fileInfo.Attributes = FileAttributes.Temporary; 

    string writetext = "text I need in a Firefox page"; 
    File.WriteAllText(fileName, writetext); 

    ProcessStartInfo startInfo = new ProcessStartInfo(); 
    startInfo.FileName = "firefox.EXE"; 
    startInfo.Arguments = fileName; 
    Process.Start(startInfo); 

    if (File.Exists(fileName)) 
    { 
     File.Delete(fileName); 
    } 

    } 
    catch (SystemException ex) 
    { 
    MessageBox.Show("An error occured: " + ex.Message); 
    } 
+0

프로세스가 시작될 때까지 기다려야합니다. 아마도 다음과 같은 스레드가 유용 할 것입니다 : [Process.Start가 프로세스가 시작될 때까지 대기하게 만들기] (http://stackoverflow.com/questions/6390030/c-sharp-making-a-process-start-wait -until-the-process-has-startup-up) –

답변

4

또는 대신 data URI을 사용할 수 있습니다. firefox.exe "data:text/plain,Lorem ipsum dolor sit amet"

+0

+1. 이 정보를 주셔서 감사합니다. 이전에는 본 적이 없었습니다. 오픈 파이어 폭스 인스턴스 (따옴표 제외)에서도 작동하는 것을 알면 놀랐습니다. –

+1

따옴표는 명령 줄에서 시작하려고했을 때 사용됩니다. 그렇지 않으면 문자열은 매개 변수의 배열로 처리되고 Fx는 모든 단어에 대해 탭을 엽니 다. –

+0

데이터 uri에 대한 가장 중요한 부분은 일부 html/javascript를 base64하고 몇 가지 간단한 xss에 대해 잘못 테스트 된 제한된 형식 지원 사이트에 포함시키는 것입니다. –

0

사용자 TEMP 폴더에 응용 프로그램과 관련된 하위 폴더를 만들고 거기에 파일을 저장합니다.

나는 아무도 그 폴더에 글을 쓰지 않을 것이라고 가정합니다.

Process.Start 코드를 실행할 때마다 "파일이 30 분 이상 지났습니다"(값이 다를 수 있음) 필터를 사용하여 해당 폴더에서 모든 파일을 제거해야합니다.

최악의 경우 해당 폴더에 몇 개의 파일이 있지만 파일의 양은 늘어나지 않습니다.

0

여기에서 취할 수있는 몇 가지 접근법이 있습니다. 가장 위험한 접근 방식은 Thread.Sleep(5000)으로 전화해서 파일을 읽거나 삭제하기 전에 Firefox가 파일을 읽는 데 충분한 시간이되기를 바랍니다. 그러나 매우 느린 시스템에서는 충분하지 않을 수 있습니다.

var p = Process.Start(startInfo); 
p.WaitForExit(); 
if(File.Exists(fileName)) { 
    File.Delete(fileName); 
} 

이, 물론, 파이어 폭스가 종료 될 때까지 당신의 호출 프로그램을 차단합니다 :

더 나은 방법은 프로세스가 파일을 삭제하기 전에 종료 될 때까지 기다리는 것입니다. 여전히 다른 옵션이 있습니다. 즉, Exited 이벤트를 기다리는 것입니다.