2012-02-13 2 views
0

Я пытаюсь написать программу для передачи строки, которая является именем файла. Затем я хочу, чтобы программа запускала/открывала файл, который я передавал в качестве параметра.Выполнить файл с длинным пути к файлу

Я сделал некоторые исследования, и я уверен, что я должен использовать что-то вроде этого: Link

Но я нашел только примеры, чтобы открыть (чтобы wirte) файлы, удалять и найти файлы. MS Library

У меня возникли проблемы с адаптацией кода.

Может ли кто-нибудь мне помочь? Вот что я придумал:

using System; 
using System.Diagnostics; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.ComponentModel; 
using System.Runtime.InteropServices; 
using Microsoft.Win32.SafeHandles; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] 
     static extern bool abreFicheiro(string lpFileName, bool bFailIfExists); 

     static void Main(string[] args) { 
      string caminho = fixPathForLong(@args[0]); 
      abreFicheiro(caminho); 
     } 

     public static bool abreFicheiro(string caminho) { 
      Process.Start(caminho); 
      if (!abreFicheiro(caminho, false)) 
      { 
       throw new Win32Exception(); 
      } 

      return true; 
     } 

     private static string fixPathForLong(String path) 
     { 
      if (!path.StartsWith(@"\\?\")) 
       path = @"\\?\" + path; 
      return path; 
     } 
    } 
} 

EDIT: Там, кажется, некоторая путаница относительно того, что я wan't, поэтому я постараюсь прояснить.

У меня есть приложение FoxPro, в котором у меня есть записи. Для некоторых из этих записей я хочу связать изображение или документ, поэтому я храню его путь в поле в базе данных. Пока, так хорошо. Проблема заключается в том, что файлы восходят к нескольким ТБ (это правильно Tera Bytes), а пути более длинны, чем максимально допустимые API-интерфейсами Windows.

Я хочу открыть эти файлы непосредственно у Fox, но Fox не поддерживает длинные пути. Итак, я хочу написать приложение на C#, чтобы передать длинное имя файла в качестве параметра и открыть его этим приложением ...

Проблема в том, что C# также наследует ограничение Windows API. Я столкнулся с обходным путем для удаления, перемещения и открытия (в режиме редактирования) файлов с такими длинными дорожками. Но я хочу только, чтобы окна открывали файл и показывали его пользователю.

Надеюсь, я сделал себя ясным. Извините за плохой английский.

+0

Put C# в качестве метки на ваш вопрос, пожалуйста, – m0skit0

+0

сделано. спасибо за напоминание. – user1206709

+0

Непонятно, что вы хотите спросить. Если вы хотите уменьшить длинный путь, вы можете использовать API GetShortPathName http://pinvoke.net/default.aspx/kernel32/GetShortPathName.html – Mohit

ответ

0

Я думаю, что это возможно с помощью класса FileStream. Или, может быть, я неправильно понял, что вы спрашиваете?

+0

FileStream - это открыть файлы, чтобы я мог редактировать его содержимое (думаю). То, что я хочу, - это пройти путь к слову или PDF-файлу, или к какому-либо изображению или к тому или иному, и открыть окна этого файла в его представлении/редакторе по умолчанию. Process.Start(); делает это, но имеет ограничение MAX_PATH. – user1206709

0

Оказывается, мой код был почти правильно:

Вот правильный код: (если кто-то хочет знать)

using System; 
using System.Diagnostics; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.ComponentModel; 
using System.Runtime.InteropServices; 
using Microsoft.Win32.SafeHandles; 

namespace ConsoleApplication1 
{ 
    class Program { 
     static void Main(string[] args) 
     { 
      string caminho = fixPathForLong(@args[0]); 
      Process.Start(caminho); 
     } 

     private static string fixPathForLong(String path) { 
      if (!path.StartsWith(@"\\?\")) 
       path = @"\\?\" + path; 
      return path; 
     } 
    } 
} 
Смежные вопросы