gpt4 book ai didi

c# - PathTooLongException C# 4.5

转载 作者:太空狗 更新时间:2023-10-29 23:59:04 26 4
gpt4 key购买 nike

我无法复制某些文件夹 260+ 个字符(例如:F:\NNNNNNNNNNNNNNNN\NNNNNNNNNNN\ROOT\$RECYCLE.BIN\S-1-5-21-3299053755-4209892151-505108915-1000\$RMSL3U8\NNNNNNNNN NNNNNNNNNN\NNNNNNNNNNNN\NNNNNNNNNNNNNNNNNNNNNN\publish\Application Files\TNNNNNNNNNNNNNN_1_0_0_0\NNNNNNNNNNNNNN.exe.manifest) 到其他一些地方与标准 DrectoryInfo.Create();添加\?\或\?\UNC\(如“\\?\UNC\”)只是抛出另一个 ArgumentException。我究竟做错了什么?如果不使用 Directory.SetCurrentDirectory() 我还能做什么?

最佳答案

实际上,您需要从 C# 调用 win32。我们做到了这一点

using System;
using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;

public static class LongPath
{
static class Win32Native
{
[StructLayout(LayoutKind.Sequential)]
public class SECURITY_ATTRIBUTES
{
public int nLength;
public IntPtr pSecurityDescriptor;
public int bInheritHandle;
}

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool CreateDirectory(string lpPathName, SECURITY_ATTRIBUTES lpSecurityAttributes);

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern SafeFileHandle CreateFile(string lpFileName, int dwDesiredAccess, FileShare dwShareMode, SECURITY_ATTRIBUTES securityAttrs, FileMode dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile);
}

public static bool CreateDirectory(string path)
{
return Win32Native.CreateDirectory(String.Concat(@"\\?\", path), null);
}

public static FileStream Open(string path, FileMode mode, FileAccess access)
{
SafeFileHandle handle = Win32Native.CreateFile(String.Concat(@"\\?\", path), (int)0x10000000, FileShare.None, null, mode, (int)0x00000080, IntPtr.Zero);
if (handle.IsInvalid)
{
throw new System.ComponentModel.Win32Exception();
}
return new FileStream(handle, access);
}
}

示例代码:

string path = @"c:\".PadRight(255, 'a');
LongPath.CreateDirectory(path);

path = String.Concat(path, @"\", "".PadRight(255, 'a'));
LongPath.CreateDirectory(path);

string filename = Path.Combine(path, "test.txt");

FileStream fs = LongPath.Open(filename, FileMode.CreateNew, FileAccess.Write);

using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine("abc");
}

关于c# - PathTooLongException C# 4.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12747132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com