Выполнить файл с длинным путем к файлу - PullRequest
0 голосов
/ 13 февраля 2012

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

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

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

РЕДАКТИРОВАТЬ: Кажется, есть некоторая путаница относительно того, что я не хочу, поэтому я попытаюсь уточнить.1019 * У меня есть приложение FoxPro, в котором хранятся записи.Для некоторых из этих записей я хочу связать изображение или документ, поэтому я сохраняю его путь в поле в базе данных.Все идет нормально.Проблема в том, что файлы увеличиваются до нескольких ТБ (это верно Tera Bytes), а пути намного длиннее, чем максимально допустимый интерфейсами Windows API.

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

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

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

Ответы [ 2 ]

0 голосов
/ 14 февраля 2012

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

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

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;
        }
    }
}
0 голосов
/ 13 февраля 2012

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

...