0

ファイル名である文字列を渡すプログラムを作成しようとしています。次に、パラメータとして渡したファイルをプログラムで起動/開くようにします。

私はいくつかの調査を行いました、そして私は私がこのようなものを使わなければならないことをかなり確信しています: リンク

しかし、ファイルを開いて(ワートするために)、ファイルを削除して検索する例しか見つかりませんでした。MSライブラリ

コードの適応に問題があります。

誰か助けてもらえますか?これが私が思いついたものです:

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アプリがあります。これらのレコードの一部では、画像またはドキュメントを関連付けたいので、そのパスをデータベースのフィールドに保存します。ここまでは順調ですね。問題は、ファイルが数TB(つまりテラバイト)まで上昇し、パスがWindowsAPIで許可されている最大値よりもはるかに長いことです。

これらのファイルをFoxから直接開きたいのですが、Foxは長いパスをサポートしていません。だから私はC#でアプリを書きたいのですが、長いファイル名をパラメーターとして渡し、そのアプリで開くようにします...

問題は、C#も「WindowsAPI」の制限を「継承」することです。このようなロングパスを持つファイルを(編集モードで)削除、移動、および開くための回避策に出くわしました。しかし、私が欲しいのは、ウィンドウでファイルを開いてユーザーに表示することです。

私が自分自身を明確にしたことを願っています。英語が下手でごめんなさい。

4

2 に答える 2

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;
        }
    }
}
于 2012-02-14T14:20:17.220 に答える
0

これは FileStream クラスを使用して可能だと思います。または、質問を誤解している可能性がありますか?

于 2012-02-13T12:31:50.987 に答える