728x90
반응형
728x170
▶ UrlCreateFromPath API 함수를 사용해 디렉토리/파일 경로에서 URI 구하기 예제
using System;
string path = @"d:\foo\..\foo";
Uri uri = GetURI(path);
Console.WriteLine(uri.AbsolutePath);
Console.WriteLine(uri.AbsoluteUri );
728x90
▶ UrlCreateFromPath API 함수를 사용해 디렉토리/파일 경로에서 URI 구하기
using System;
using System.Runtime.InteropServices;
using System.Text;
#region URI 구하기 - GetURI(path)
/// <summary>
/// URI 구하기
/// </summary>
/// <param name="path">경로</param>
/// <returns>URI</returns>
public Uri GetURI(string path)
{
const string prefix = @"\\";
const string extended = @"\\?\";
const string extendedUNC = @"\\?\UNC\";
const string device = @"\\.\";
const StringComparison comparison = StringComparison.Ordinal;
if(path.StartsWith(extendedUNC, comparison))
{
path = $"{prefix}{path.Substring(extendedUNC.Length)}";
}
else if(path.StartsWith(extended, comparison))
{
path = $"{prefix}{path.Substring(extended.Length)}";
}
else if(path.StartsWith(device, comparison))
{
path = $"{prefix}{path.Substring(device.Length)}";
}
int length = 1;
StringBuilder urlStringBuilder = new StringBuilder(length);
int result = UrlCreateFromPath(path, urlStringBuilder, ref length, 0);
if(length == 1)
{
Marshal.ThrowExceptionForHR(result);
}
urlStringBuilder.EnsureCapacity(length);
result = UrlCreateFromPath(path, urlStringBuilder, ref length, 0);
if(result == 1)
{
throw new ArgumentException("Argument is not a valid path.", "path");
}
Marshal.ThrowExceptionForHR(result);
return new Uri(urlStringBuilder.ToString());
}
#endregion
#region 경로에서 URL 생성하기 - UrlCreateFromPath(path, urlStringBuilder, urlLength, reserved)
/// <summary>
/// 경로에서 URL 생성하기
/// </summary>
/// <param name="path">경로</param>
/// <param name="urlStringBuilder">URL 문자열 빌더</param>
/// <param name="urlLength">URL 길이</param>
/// <param name="reserved">예약</param>
/// <returns>처리 결과</returns>
[DllImport("shlwapi", CharSet=CharSet.Auto, SetLastError=true)]
private static extern int UrlCreateFromPath(string path, StringBuilder urlStringBuilder, ref int urlLength, int reserved);
#endregion
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] ObservableCollection 클래스 : 제네릭 열거 가능형을 관찰 가능 컬렉션으로 변환하기 (0) | 2022.06.21 |
---|---|
[C#/COMMON] ObservableCollection 클래스 : 열거 가능형을 관찰 가능 컬렉션으로 변환하기 (0) | 2022.06.21 |
[C#/COMMON] Convert 클래스 : ChangeType 정적 메소드를 사용해 지정 타입으로 변환하기 (0) | 2022.06.21 |
[C#/COMMON] TypeConverter 클래스 : ConvertFrom 메소드를 사용해 지정 타입 변환하기 (0) | 2022.06.21 |
[C#/COMMON] TypeConverter 클래스 : ConvertFrom 메소드를 사용해 문자열에서 지정 타입으로 변환하기 (0) | 2022.06.21 |
[C#/COMMON] Uri 클래스 : EscapeUriString/UnescapeDataString 정적 메소드를 사용해 이스케이프 처리하기 (0) | 2022.06.21 |
[C#/COMMON] UriBuilder 클래스 사용하기 (0) | 2022.06.21 |
[C#/COMMON] Uri 클래스 : URI 문자열에서 퍼센트 인코딩(percent-encoding) 사용하기 (0) | 2022.06.21 |
[C#/COMMON] 디렉토리/파일 경로에서 URL 구하기 (0) | 2022.06.21 |
[C#/COMMON] 열거형 최대값 구하기 (0) | 2022.06.21 |
댓글을 달아 주세요