"C : \ Documents and settings"와 같은 "긴 이름"을 해당 "짧은 이름"으로 변환하는 표준 버그 방지 방법을 찾고 있습니다. "C : \ DOCUME ~ 1 ".net의 짧은 경로로 변환하는 표준 방법
내 C# 응용 프로그램을 사용하여 외부 프로세스를 실행하려면이 코드가 필요합니다. 나가 "긴 이름"에있는 경로로 그것을 먹이면 그것은 실패합니다.
"C : \ Documents and settings"와 같은 "긴 이름"을 해당 "짧은 이름"으로 변환하는 표준 버그 방지 방법을 찾고 있습니다. "C : \ DOCUME ~ 1 ".net의 짧은 경로로 변환하는 표준 방법
내 C# 응용 프로그램을 사용하여 외부 프로세스를 실행하려면이 코드가 필요합니다. 나가 "긴 이름"에있는 경로로 그것을 먹이면 그것은 실패합니다.
이 외부 프로세스는 따옴표로 긴 파일 경로를 묶어야 경우에도 실패 하는가를 참조하십시오? 외부 앱이 지원하는 경우 간단한 방법 일 수 있습니다.
myExternalApp "C:\Documents And Settings\myUser\SomeData.file"
그것은 작동합니다. 무슨 일이 일어나는지 설명하는 설명이나 문서가 있습니까? – Hanan
아닙니다. 문자열이 따옴표로 구분 된 경우 공백으로 인수를 허용하는 것은 (합리적으로) 현대 응용 프로그램의 표준 동작입니다 ... – ZombieSheep
경로는 기본적으로 명령 줄 옵션이고 공백은 명령 줄 옵션의 구분 기호이므로 따옴표가 필요합니다. 공백이있는 경로를 사용하면 명령 줄이 여러 옵션으로 구문 분석됩니다. 정의 : "공백"- 문자가없는 것으로 종종 간주되는 ASCII 문자 –
Windows API 함수를 호출 할 준비가되어 있으면 GetShortPathName() 및 GetLongPathName()이이 기능을 제공합니다.
는 http://csharparticles.blogspot.com/2005/07/long-and-short-file-name-conversion-in.html이
const int MAX_PATH = 255;
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName(
[MarshalAs(UnmanagedType.LPTStr)]
string path,
[MarshalAs(UnmanagedType.LPTStr)]
StringBuilder shortPath,
int shortPathLength
);
private static string GetShortPath(string path) {
var shortPath = new StringBuilder(MAX_PATH);
GetShortPathName(path, shortPath, MAX_PATH);
return shortPath.ToString();
}
+1 (내부 버그로 인해) shortpath에서만 작동하는 exe를 통합하는 중입니다. –
MAX_PATH = 260 in windows.h – Constantin
이것은 단축 할'MAX_PATH'보다 큰 경로를 전달하면 실패 (아무것도 반환하지 않습니다). – user17753
WinAPI의 GetShortPathName 트릭은 잘 작동하지만 거기에 매우 긴 경로를 사용할 때는주의해야합니다.
경로가 MAX_PATH보다 긴 7zip을 호출 할 때 문제가 발생했습니다. 경로가 너무 길면 GetShortPathName이 작동하지 않습니다. "\? \"로 접두사를 붙이면 작업을 수행하고 올바르게 단축 된 경로를 반환합니다.
"짧은 경로"는 "8.3 이름"이라고합니다. – user17753