Выполнить файл с длинным путем к файлу

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

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

Но я нашел только примеры, чтобы открыть (чтобы записать) файлы, удалить и найти файлы. 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;
        }
    }
}
Другие вопросы по тегам