2018年2月1日 星期四

[C#] 判斷特定網址是否有效

由於在下載檔案的時候會找不到檔案就會跳出404,
讓我感到相當的困擾,
故我需要在下載檔案前先判斷此網址是否真的存在,
廢話不多說,程式碼如下:

private bool CheckUrlExists(string Url)
{
    try
    {
        WebRequest request = WebRequest.Create(Url);
 HttpWebResponse response = (HttpWebResponse)request.GetResponse();

 if (response.StatusCode == HttpStatusCode.OK)
 {
     return true;
 } // End if
    } //End try
    catch (Exception)
    {
 return false;
    } //End catch
    return false;
} //End function


這樣就可以先判斷網址的有效性,
進而避免404的錯誤產生。

2017年4月11日 星期二

C#基礎系列(1)-主控台應用程式-輸出文字

在C#主控台應用程式中,
輸出文字使用Console的Write跟WriteLine方法。

至於他們兩個有什麼差別呢?
就是前者會換行、後者不會換行。


讓我們寫段Code來試試:

static void Main(string[] args)
{
 Console.Write("Hello");
 Console.Write("World!");
 Console.WriteLine();  //換行
 Console.WriteLine("Hello");
 Console.WriteLine("World!");
 Console.ReadLine();  //讓視窗暫停
}

2016年10月4日 星期二

[C#]使用程式碼上傳檔案到FTP

最近在研究如何將檔案利用程式碼上傳到FTP


程式碼如下:
FtpWebRequest request = 
 (FtpWebRequest)WebRequest.Create("ftp://帳號@ftp.XXXX.com.tw/ExcelFile.xls");
 request.Method = WebRequestMethods.Ftp.UploadFile;

 // FTP的帳密.
 request.Credentials = new NetworkCredential("帳號", "密碼");

 // 要上傳的檔案
 StreamReader sourceStream = new StreamReader("ExcelFile.xls");
 byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
 sourceStream.Close();
 request.ContentLength = fileContents.Length;

 Stream requestStream = request.GetRequestStream();
 requestStream.Write(fileContents, 0, fileContents.Length);
 requestStream.Close();

 FtpWebResponse response = (FtpWebResponse)request.GetResponse();

 Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);

 response.Close();

如出現"227 Entering Passive Mode"的錯誤,
需在建立request之後加入request.UsePassive = false;
會發生這樣的錯誤是因為程式預設是使用被動式的連線,
當Server端也是被動式的連線就會發生錯誤,
所以將使用被動連線設定成false就解決了

程式碼參考網址:http://pdyurfof.pixnet.net/blog/post/27044025-c%23-%E4%B8%8A%E5%82%B3%E6%96%87%E4%BB%B6%E8%87%B3ftp

2016年9月19日 星期一

[C#]檢查資料夾是否存在並建立資料夾

有時候想將檔案儲存在特定資料夾,
但是如果使用者沒有這個資料夾該怎麼辦呢?

方法如下:

using System.IO;

if (Directory.Exists(@"C:\test"))
{
    //資料夾存在
}
else
{
    //資料夾不存在,建立資料夾
    Directory.CreateDirectory(@"C:\test");
}

2016年8月25日 星期四

[C#] 使用電腦名稱查找IP Use host name to find IP

如何在區網使用電腦名稱查詢IP
不囉嗦,直接上程式碼

private void UseHostNameToFindIP(string hostName)
{
    IPAddress[] getIP;
    try
    {
        //利用電腦名稱取得IP
        getIP = Dns.GetHostAddresses(str_ClientHostName[i]);  
        //搜尋清單內的所有IP,因為會包含IPV6跟IPV4
        for (int j = 0; j < getIP.Length; j++)  
        {
            if (IPAddress.Parse(getIP[j].ToString()).AddressFamily 
                == AddressFamily.InterNetwork)  //只找出IPV4的IP
            {
                Console.WriteLine(getIP[j].ToString());
            }
        }
    }
    catch (SocketException)
    {
        //找不到此電腦名稱就將IP設定成127.0.0.1
        str_ContentClientIP[i] = "127.0.0.1";  
    }
}

2016年8月24日 星期三

[C#] 查詢本機IP GetIP

寫程式常常會遇到需要用到本機IP的事
但是又不知道本機IP是多少該怎麼辦呢?

獲取本機所有IP位址:
private void GetIP()  
{  
    string hostName = Dns.GetHostName();  //取得本機名稱
    //取得所有IP,包含IPV4和IPV6
    System.Net.IPAddress[] addressList = Dns.GetHostAddresses(hostName);  
    foreach (IPAddress ip in addressList)  
    {  
        Console.WriteLine(ip.ToString());  
    }  
    Console.ReadLine();
}
以上的IP包含所有網卡(虛擬網卡)的IPV4和IPV6的IP

如果想要只取IPV4的位址,需加入以下條件,
獲取本機所有IPV4位址:
private void GetIP()  
{  
    string hostName = Dns.GetHostName();  //取得本機名稱
    //取得所有IP,包含IPV4和IPV6
    System.Net.IPAddress[] addressList = Dns.GetHostAddresses(hostName);  
    foreach (IPAddress ip in addressList)  
    {  
        //過濾IPV4的位址
        if (ip.AddressFamily == AddressFamily.InterNetwork)  
            Console.Writeline(ip.ToString());    
    }  
    Console.ReadLine();
}
以上包含所有網卡(虛擬網卡)的IPV4

若想過濾掉虛擬網卡位址的話,必需使用下列程式碼實現,
獲取本機IPV4,過濾虛擬網卡:
class Program
{
    static void Main(string[] args)
    {

        Console.WriteLine(GetLocalIP());
        Console.WriteLine("-- -- The End -- --");
        Console.ReadKey();
    }


    public static string GetLocalIP()
    {
        string result = RunApp("route", "print", true);
        Match m = Regex.Match(result, @"0.0.0.0\s+0.0.0.0\s+(\d+.\d+.\d+.\d+)\s+(\d+.\d+.\d+.\d+)");
        if (m.Success)
        {
            return m.Groups[2].Value;
        }
        else
        {
            return "找不到本機IP";
        }
    }

    public static string RunApp(string filename, string arguments, bool recordLog)
    {
        try
        {
            if (recordLog)
            {
                Trace.WriteLine(filename + " " + arguments);
            }
            Process proc = new Process();
            proc.StartInfo.FileName = filename;
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.Arguments = arguments;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.UseShellExecute = false;
            proc.Start();
            using (System.IO.StreamReader sr = 
                new System.IO.StreamReader(proc.StandardOutput.BaseStream, 
                Encoding.Default))
            {
                string txt = sr.ReadToEnd();
                sr.Close();
                if (recordLog)
                {
                    Trace.WriteLine(txt);
                }
                if (!proc.HasExited)
                {
                    proc.Kill();
                }
                return txt;
            }
        }
        catch (Exception ex)
        {
            Trace.WriteLine(ex);
            return ex.Message;
        }
    }
}
以上就能過濾掉其他討厭的IP位址啦!

[C#] 如何開啟特定檔案OpenFile


在C#中要如何開啟特定檔案呢?
很簡單,一行搞定,檔案路徑是對的就可以了

using System.Diagnostics;

namespace OpenFile
{
    class Program
    {
        static void Main(string[] args)
        {
            //欲開啟的檔案路徑
            Process.Start(@"D:\test.exe");
        }
     }
}