我正在尝试编写一个程序来传递一个文件名字符串。 然后我希望程序启动/打开我作为参数传递的文件。
我做了一些研究,我很确定我必须使用这样的东西: Link
但我只找到了打开文件(删除文件,删除文件和查找文件)的示例。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应用程序,其中存储了记录。对于其中一些记录,我想关联图像或文档,因此我将其路径存储到数据库中的字段中。 到现在为止还挺好。 问题是文件上升到几TB(这是正确的Tera字节),并且路径长于Windows API允许的最大值。
我想直接从Fox打开这些文件,但Fox不支持长路径。 所以我想在C#中编写一个应用程序,我将长文件名作为参数传递,然后由该应用程序打开...
问题是C#还“继承”了Windows API的限制。 我遇到了删除,移动和打开(在编辑模式下)具有这样的长路径的文件的解决方法。但我想要的只是让Windows打开文件并将其显示给用户。
希望我清楚自己。 抱歉英文不好。
答案 0 :(得分:0)
我认为这可以使用FileStream类。或者我可能会误解你的问题吗?
答案 1 :(得分: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;
}
}
}