첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

▶ Uri 클래스 : TryCreate 정적 메소드를 사용해 URL에서 파일명 구하기 예제

Console.WriteLine(GetFileName(""));                                         // "index.html"
Console.WriteLine(GetFileName("test"));                                     // "test.html"
Console.WriteLine(GetFileName("test.xml"));                                 // "test.xml"
Console.WriteLine(GetFileName("/test.xml"));                                // "test.xml"
Console.WriteLine(GetFileName("/test.xml?q=1"));                            // "test.xml"
Console.WriteLine(GetFileName("/test.xml?q=1&x=3"));                        // "test.xml"
Console.WriteLine(GetFileName("test.xml?q=1&x=3"));                         // "test.xml"
Console.WriteLine(GetFileName("http://www.a.com/test.xml?q=1&x=3"));        // "test.xml"
Console.WriteLine(GetFileName("http://www.a.com/test.xml?q=1&x=3#aidjsf")); // "test.xml"
Console.WriteLine(GetFileName("http://www.a.com/a/b/c/d"));                 // "d.html"
Console.WriteLine(GetFileName("http://www.a.com/a/b/c/d/e/"));              // "index.html"

 

300x250

 

▶ Uri 클래스 : TryCreate 정적 메소드를 사용해 URL에서 파일명 구하기

#region 파일명 구하기 - GetFileName(url)

/// <summary>
/// 파일명 구하기
/// </summary>
/// <param name="url">URL</param>
/// <returns>파일명</returns>
public string GetFileName(string url)
{
    string fileName = string.Empty;

    if(Uri.TryCreate(url, UriKind.Absolute, out Uri uri))
    {
        fileName = GetValidFileName(Path.GetFileName(uri.AbsolutePath));
    }

    string fileExtension;

    if(!string.IsNullOrEmpty(fileName))
    {
        fileExtension = Path.GetExtension(fileName);

        if(string.IsNullOrEmpty(fileExtension))
        {
            fileExtension = ".html";
        }
        else
        {
            fileExtension = string.Empty;
        }

        return GetValidFileName($"{fileName}{fileExtension}");
    }

    fileName = Path.GetFileName(url);

    if(string.IsNullOrEmpty(fileName))
    {
        fileName = "index";
    }

    fileExtension = Path.GetExtension(fileName);

    if(string.IsNullOrEmpty(fileExtension))
    {
        fileExtension = ".html";
    }
    else
    {
        fileExtension = string.Empty;
    }

    fileName = fileName + fileExtension;

    if(!fileName.StartsWith("?"))
    {
        fileName = fileName.Split('?').FirstOrDefault();
    }

    fileName = fileName.Split('&').LastOrDefault().Split('=').LastOrDefault();

    return GetValidFileName(fileName);
}

#endregion
#region 유효한 파일명 구하기 - GetValidFileName(fileName)

/// <summary>
/// 유효한 파일명 구하기
/// </summary>
/// <param name="fileName">파일명</param>
/// <returns>유효한 파일명</returns>
private string GetValidFileName(string fileName)
{
    foreach(char character in Path.GetInvalidFileNameChars())
    {
        fileName = fileName.Replace(character.ToString(), string.Empty);
    }

    return fileName;
}

#endregion
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요