Выполнить файл с длинным путем к файлу
Я пытаюсь написать программу, которая передаст строку, которая является именем файла. Затем я хочу, чтобы программа запустила / открыла файл, который я передал в качестве параметра.
Я провел некоторое исследование, и я уверен, что должен использовать что-то вроде этого: Ссылка
Но я нашел только примеры, чтобы открыть (чтобы записать) файлы, удалить и найти файлы. 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;
}
}
}
РЕДАКТИРОВАТЬ: Кажется, есть некоторая путаница относительно того, что я не хочу, поэтому я постараюсь уточнить.
У меня есть приложение FoxPro, в котором хранятся записи. Для некоторых из этих записей я хочу связать изображение или документ, поэтому я сохраняю его путь в поле в базе данных. Все идет нормально. Проблема в том, что файлы увеличиваются до нескольких ТБ (это верно Tera Bytes), а пути намного длиннее, чем максимально допустимый в Windows API.
Я хочу открыть эти файлы напрямую из Fox, но Fox не поддерживает длинные пути. Поэтому я хочу написать приложение на C#, чтобы передать длинное имя файла в качестве параметра и открыть его этим приложением...
Проблема в том, что C# также "наследует" ограничение Windows API. Я нашел обходной путь для удаления, перемещения и открытия (в режиме редактирования) файлов с такими длинными путями. Но я хочу, чтобы окна открывали файл и показывали его пользователю.
Надеюсь, я все прояснил. Извините за плохой английский.
2 ответа
Я думаю, что это возможно с помощью класса FileStream. Или, может быть, я неправильно понял ваш вопрос, пожалуйста?
Оказывается, мой код был почти правильным:
Вот правильный код: (если кто-то хочет знать)
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;
}
}
}