顯示具有 檔案 標籤的文章。 顯示所有文章
顯示具有 檔案 標籤的文章。 顯示所有文章

2023年5月3日 星期三

V20302 檔案處理 , 開啟檔案,寫入文字,讀取文字 - 存成 *_log.TXT , 並傳送至前端

 目的: V20302 將文字存入 *_log.TXT , 並傳送至前端

處理說明: 0>傳送檔案至前端 
                      1>>必需用 form.submit , 不可用 Ext.Ajax
                      2>>standardSubmit=true
                      3>>必需用主畫面 Ext.getCmp("s_form").submit
                             不可用子畫面 me.up("form").submit() 
                             也不可用子畫面 Ext.getCmp("mySubForm").submit()
                              --> 因為執行 submit 時,本子畫面已被 destroy() 
                                       this.up("window").close();
                                       this.up("window").destroy();
                  1>判斷檔案是否存在,若已存在,則刪除檔案
                       if (File.Exists(Tmp_out_pFName))
                       {   File.Delete(Tmp_out_pFName);  }

                  2>如何將文字存入 //換行
                       string  Tmp_Str = "Hello text" + "\r\n";
                       File.WriteAllText("myfilename.txt", Tmp_Str);
                       File.AppendAllText("myfilename.txt", Tmp_Str);

                  3>讀取檔案的文字
                      string  Tmp_Str = File.ReadAllText("myfilename.txt");

                   4>複製檔案
                       File.Copy("myname.txt", "myname2.txt");





1>*.js
  var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
 for (let i = 0; i <= cur_recs.length - 1; i++) {
            console.log("i:", i);
            cur_rec = cur_recs[i];
            Tmp_DataAry1.push(cur_rec.data);
 }  // for i=0 to 
        let Tmp_DataString1 = JSON.stringify(Tmp_DataAry1);
            var np = {};
        np["DataString1"] = Tmp_DataString1;      
   //me.up("form").submit({      
   Ext.getCmp('s_form').submit({
                method: "POST",
                url: '../../api/V20302API/DoRemove',
                standardSubmit: true,      
                params: np,
                async: false,
            })  //end of form.submit


2>*.cs
//開啟檔案
string Tmp_out_FName = "V20306_系統件除帳_log.txt";      //處理_log.txt
string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";  // 取得實實的路徑  string Tmp_out_pFName = documentPath + Tmp_out_FName;    //含 path 的Filename
            if (File.Exists(Tmp_out_pFName))
            {
                File.Delete(Tmp_out_pFName);
            }

//using (StreamWriter sw = new StreamWriter(Tmp_out_pFName))   //小寫TXT     
//{            
  for (var i = 0; i < dt1.Rows.Count; i++)
 {
     Tmp_FMNO = dt1.Rows[i]["FMNO"].ToString();
      Tmp_Sql = " SELECT   A.RPNOAF,A.TYPEAF as CSM_TYPEAF,B.TYPEAF as FM_TYPEAF  "
                      + "  FROM     CSM_AF@TLS_245 A, AMM_FM B   "
                      + "   WHERE  A.RPNOAF = nvl(B.MRPNOAF, B.RPNOAF)  "
                      + "   AND        B.FMNO = " + myfunc.AA(Tmp_FMNO);
                    Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                    Tmp_RPNOAF = myfunc.StrExtract(Tmp_Str, 1);
                    Tmp_CSM_TYPEAF = myfunc.StrExtract(Tmp_Str, 2);
                    Tmp_FM_TYPEAF = myfunc.StrExtract(Tmp_Str, 3);
                    if (Tmp_CSM_TYPEAF != Tmp_FM_TYPEAF)
                    {
                        Tmp_Str = "交修單號(" + Tmp_RPNOAF + ")"
                                       + " AMM約別(" + Tmp_FM_TYPEAF + ") "
                                       + "和 TLS的約別(" + Tmp_CSM_TYPEAF + ") 不同 ,"
                                       + "敬請檢核!!<br>"+"\r\n";
                        //File.WriteAllText(Tmp_out_pFName, Tmp_Str);
                        File.AppendAllText(Tmp_out_pFName, Tmp_Str);
                        Tmp_Str =File.ReadAllText(Tmp_out_pFName);
                            //sw.WriteLine(Tmp_Str);
                        }
                }//   for (var i = 0; i < dt1.Rows.Count; i++)
   //sw.Close();


PS: c# using 的使用方法如下:
1>引入命名空間
    using System.Text;
2>使用資源後,自動釋放 
using (var file = File.Open("filePath", FileMode.OpenOrCreate))
{
   //do something
}

-->
FileStream file = File.Open("filePath", FileMode.OpenOrCreate);
try
{
//do something
}
finally
{
if (file!= null)
{
((IDisposable)file).Dispose();
}
}


2023年3月14日 星期二

V80204C - XLS2XLS – 依讀取的 XLS 檔案,匯出相關XLS檔案

 目的:  V80204C – [確定匯入]- 依讀取 XLS 檔案,匯出相關XLS檔案

處理說明: 1>後端.[讀取檔案] -   Request.Files  
                                                     - foreach (string cur_FName in Request.Files)
                                                        Stream Tmp_in_Stream = Request.Files[cur_FName].InputStream;
                                                        wk.LoadFromStream(Tmp_in_Stream);
                  2>後端.[匯出檔案] 
                                    -  wk2.SaveToStream(Tmp_out_Stream, FileFormat.Version2010);
                                       HttpContext.Current.Response.BinaryWrite(Tmp_out_Stream.ToArray());

                  1>[匯出檔案]至前端 Browser, 必需使用 Cookie 顯示訊息,
                      --> 不可使用 response.Content
                      --> *.cs.匯出函式 傳回 voild , 非 HttpResponseMessage, 不可使用 successful/failure ,

                2>若同時[匯入檔案] &[匯出檔案], 不可使用 f_downloadFile(若只匯出檔案才可用之)
                          -->  因 f_downloadFile 會自行產生 Form & submit , 非使用者自定的畫面.submit(包含[檔案]欄位)



1>*.js  - V80204C.js
   {
            xtype: 'button', text: '確定匯入', id: 'OkBtn_Sub3',
            listeners: {
                click: function (me, e, eOpts) {                    
                    var Tmp_Str = "";
                    if (checkisnull(Ext.getCmp("sub3_FName").getValue())) {
                        Tmp_Str = "[檔案來源]欄位不可空白<br>"
                            + " 敬請檢核 !!";
                        mywarnalert(Tmp_Str);
                        return;
                    }              
                    Ok_process(me, e, eOpts);       
                } // end of click
            }  // end of listener
        },

//[確認匯入]鈕 , 處理
function Ok_process(me, e, eOpts) {
    console.log(" 1 inside Ok_process");
    console.log(" me: ", me);
    //取得 [檔案上傳].檔名
    var Tmp_FileObj = Ext.getCmp('sub3_FName');
    np["in_FName"] = Ext.getDom(Tmp_FileObj.inputId).value    
    console.log("Tmp_FileObj :", Tmp_FileObj);
    var Tmp_Str = "";
    var np = {};
    np["sub3_PROJID"] = Ext.getCmp("sub3_PROJID").getValue();
    np["out_FName"] = "V80204_件號報工統計.xlsx";
    np["headers"] = { 'Content-type': 'multipart/form-data' },

    me.up("form").submit({
        url: '../api/V80204CAPI/XLSIN2XLSOUT',
        method: 'POST',
        headers: { 'Content-type': 'multipart/form-data' },
        params: np,        
    });  // end of  me.up("form").submit({

    //隔兩秒才顯示完成訊息
    var timer = setInterval(function () {
        var cookie_token = Ext.util.Cookies.get("EX_DFile");
        if (cookie_token != null) {
            clearInterval(timer);
            timer = null;
            //mask.hide();            
            var rtn_msg=r_cookies('EX_DFile');
            mysuccessalert(rtn_msg);
            me.up("window").close();
            me.up("window").destroy();
        }
    }, 2000);  //等待 2000ms =1sec    
};  // end of Ok_process() {  //批次新增

     
2>*.cs   V80204C*.cs  XLSIN2XLSOUT
 // [件號報工統計] - [確定匯入] 鈕 , 匯入 件號XLS 檔案後,產出該[件號報工資料]
        [HttpPost]
        public void XLSIN2XLSOUT()
        {

            HttpContext c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            //OracleConnection conn = new OracleConnection(DBService.ConnectionString(("AMMEU"));//
            OracleConnection conn = new OracleConnection(DBService.ConnectionString((DBLINK)));//
            OracleCommand cmd = new OracleCommand();
            OracleDataReader reader;
            DataSet ds = null;

            //取得匯入檔案名稱   of   filefield            
            string Tmp_in_FName = nvc["in_FName"];
            //取得匯出檔案名稱   of   filefield
            string Tmp_out_FName = nvc["out_FName"];
            string Tmp_sub3_PROJID = nvc["sub3_PROJID"];
            Workbook wk = null;
            Workbook wk2 = null;
            MemoryStream Tmp_out_Stream = new MemoryStream();

            HttpRequest Request = HttpContext.Current.Request;
            var response = this.Request.CreateResponse();
            //string file_Name = Tmp_in_FName;
            string FILEDT = DateTime.Now.ToString("yyyy/MM/dd");
            string Tmp_RtnMsg = "";
            string Tmp_RtnMsg1 = "";
            string Tmp_Sql = "", Tmp_Str = "";
            int Tmp_cnt = 0;
            //HttpCookie MyCookie = new HttpCookie("Rtn_Msg");
            HttpCookie MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_Str));
            int row2 = 0;
            conn.Open();
            cmd.Connection = conn;
            try
            {
                foreach (string cur_FName in Request.Files)
                {
                    string fileType = Request.Files[cur_FName].ContentType;
                    Stream Tmp_in_Stream = Request.Files[cur_FName].InputStream;
                    Tmp_in_FName = Path.GetFileName(Request.Files[cur_FName].FileName);
                    int fileSize = Request.Files[cur_FName].ContentLength;
                    byte[] fileRcrd = new byte[fileSize];
                    //更新資料庫欄位值                                                
                    //匯入的 xls
                    wk = new Workbook();
                    wk.LoadFromStream(Tmp_in_Stream);
                    Worksheet sheet1 = wk.Worksheets[0];

                    //匯出的 xls
                    wk2 = new Workbook();
                    Worksheet sheet2 = wk2.Worksheets[0];//獲取第一個工作表
                    string[] outFieldArray = { "AMM單號", "工號", "版本", "件號", "件號名稱",
                                                           "製程", "製程資料內容", "WBS", "工單類型",  "數量", "單位",
                                                          "EOECN", "專案","機號","起始值(STARTVAL)", "情況處理碼",
                                                           "工單報工統計(小時)", "工作中心", "工作中心報工統計(小時)"
                                                                };
                    for (int i = 0; i < outFieldArray.Length; i++)
                    {
                        sheet2.Range[myfunc.GetExcelPos(i, 0)].Text = outFieldArray[i];
                    }

                    int RowsCount = sheet1.LastRow;
                    string Tmp_AMMNO, Tmp_SAPNO, Tmp_ED, Tmp_PN, Tmp_PNNAME;
                string Tmp_MKNO, Tmp_MKDESCPT, Tmp_WBS, Tmp_SROTP, Tmp_QTY, Tmp_UNIT;
              string Tmp_ECNO, Tmp_PROJID, Tmp_ACNO, Tmp_STARTVAL, Tmp_CNDPROCCODE;
                    string Tmp_ALS_HR_, Tmp_WC_, Tmp_WCHR_;

                    //STEP1 檢核  XLS 欄位名稱資料是否正確  -取得 標題 of  件號                                          
                    Tmp_PN = sheet1.Range[myfunc.GetExcelPos(0, 0)].Value;

                    //xls 欄位名稱有問題
                    if ((Tmp_PN != "件號"))
                    {
                        Tmp_RtnMsg = "匯入檔案欄位名稱必需如下:<br>";
                        //(Tmp_DTSOR != "資料來源") || (Tmp_OGONOAF != "拆檢提領編號") || (Tmp_NGONOAF != "維修提領編號") || (Tmp_RPNOAF != "拆檢交修單號") || (Tmp_MRPNOAF != "維修約交修單號") ||
                        if (Tmp_PN != "件號")
                            Tmp_RtnMsg = Tmp_RtnMsg + "第1欄欄位名稱:  [件號];";
                        //Tmp_RtnMsg = "匯入檔案欄位名稱必需如下:<br>"
                        //                         + "\件號"
                        //                         + " 敬請檢核";
                        //Tmp_Str = "{success: false,FName:" + myfunc.AA(FName) + ",Rtn_Msg:" + myfunc.AA(Tmp_RtnMsg) + "}";
                        //response.Content = new StringContent(Tmp_Str);    // 回應內容
                        //return response;
                        //以 Cookie 方式傳回訊息 , 因為要下載[匯出檔案],無傳回值 所以利用 Cookie 傳回訊息 -,f_downloadFile('EX_DFile', '../api/V80C03API/DB2XLS', np, 'POST', function () {
                        MyCookie.Value = HttpUtility.UrlEncode(Tmp_RtnMsg);
                        HttpContext.Current.Response.Cookies.Add(MyCookie);
                        HttpContext.Current.Response.End();
                    };
                    //STEP2 取得xls.[目前件號].報工資料                    
                    for (int i = 0; i < RowsCount; i++)
                    {
                        Tmp_PN = sheet1.Range[myfunc.GetExcelPos(0, i + 1)].Value;
                        if (myfunc.checkisnull(Tmp_PN))
                        { break; }
                        Tmp_Sql = "SELECT   AMMNO,SAPNO, "
                                                      + " ( SELECT  ED  "
                                                      + "   FROM  AMM_EDLST b "
                                     + "   WHERE  (AMMNO, ITM) in (   select AMMNO, max(to_number(ITM)) "
                                                                                          + " from AMM_EDLST group by AMMNO)  "
                                     + "  AND        a.AMMNO = b.AMMNO) ED,  "
                                    + "  PN,PNNAME,MKNO,MKDESCPT,WBS,SROTP,QTY,UNIT ,ECNO,PROJID,ACNO,STARTVAL,CNDPROCCODE  "
                                       + "   FROM    AMM_SRO a  "
                                       + "   WHERE  LENGTH(SAPNO)> 7  ";
                        if (!myfunc.checkisnull(Tmp_sub3_PROJID))
                            Tmp_Sql = Tmp_Sql + "    AND       PROJID = " + myfunc.AA(Tmp_sub3_PROJID);
                        Tmp_Sql = Tmp_Sql + "     AND       PN = " + myfunc.AA(Tmp_PN)
                                                         + "     ORDER   BY   ACNO,PN  ";
                        cmd.CommandText = Tmp_Sql;
                        reader = cmd.ExecuteReader();
                        while (reader.Read())
                        {
                            Tmp_AMMNO = reader["AMMNO"].ToString();
                            Tmp_SAPNO = reader["SAPNO"].ToString();
                            Tmp_ED = reader["ED"].ToString();
                            Tmp_PN = reader["PN"].ToString();
                            Tmp_PNNAME = reader["PNNAME"].ToString();
                            Tmp_MKNO = reader["MKNO"].ToString();
                            Tmp_MKDESCPT = reader["MKDESCPT"].ToString();
                            Tmp_WBS = reader["WBS"].ToString();
                            Tmp_SROTP = reader["SROTP"].ToString();
                            Tmp_QTY = reader["QTY"].ToString();
                            Tmp_UNIT = reader["UNIT"].ToString();
                            Tmp_ECNO = reader["ECNO"].ToString();
                            Tmp_PROJID = reader["PROJID"].ToString();
                            Tmp_ACNO = reader["ACNO"].ToString();
                            Tmp_STARTVAL = reader["STARTVAL"].ToString();
                            Tmp_CNDPROCCODE = reader["CNDPROCCODE"].ToString();
                            //取得[工單報工工時]
                            Tmp_Sql = " SELECT   round((sum(HOUR_WORK)+sum(HOUR_OT))/60,2)  HR  "
                                            + "  FROM  "
                                            + "    (  "
                            + " SELECT  JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT from HOUR.ALS_HOUR_COMP @ALS_HOUR where JCN = '0000' || " + myfunc.AA(Tmp_SAPNO)
                                            + " union all  "
                                            + "  select JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT from HOUR.ALS_HOUR_COMP_HISTORY @ALS_HOUR where JCN = '0000' || " + myfunc.AA(Tmp_SAPNO)
                                            + "   )  "
                                            + "   group by JCN ";
                            Tmp_ALS_HR_ = myfunc.SqlValue(Tmp_Sql);
              Tmp_Sql = "   SELECT  WC,round((sum(HOUR_WORK)+sum(HOUR_OT))/60,2)  WCHR  "
                                           + "   FROM  "
                                           + "  (  "
                                           + "   select JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT from HOUR.ALS_HOUR_COMP @ALS_HOUR where JCN = '0000' || " + myfunc.AA(Tmp_SAPNO)
                                           + "   union all  "
                                           + "   select JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT from HOUR.ALS_HOUR_COMP_HISTORY @ALS_HOUR where JCN = '0000' || " + myfunc.AA(Tmp_SAPNO)
                                           + "  )  "
                                           + "  group by JCN,WC  ";
                            Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                            Tmp_WC_ = myfunc.StrExtract(Tmp_Str, 1);
                            Tmp_WCHR_ = myfunc.StrExtract(Tmp_Str, 2);
                            //匯出至  wk2.Sheet2
                            /*
                             { AMM單號, 工號, 版本, 件號, 件號名稱,
                                                                製程, 製程資料內容, WBS, 工單類型,  數量, 單位,
                                                                EOECN, 專案,機號,起始值(STARTVAL), 情況處理碼,
                                                                工單報工統計(小時), 工作中心, 工作中心報工統計(小時)
                                                               ];
                            */
                            //- 匯出  { AMM單號, 工號, 版本, 件號, 件號名稱,
                            row2 = row2 + 1;
                            sheet2.Range[myfunc.GetExcelPos(0, row2)].Text = Tmp_AMMNO;
                            sheet2.Range[myfunc.GetExcelPos(1, row2)].Text = Tmp_SAPNO;
                            sheet2.Range[myfunc.GetExcelPos(2, row2)].Text = Tmp_ED;
                            sheet2.Range[myfunc.GetExcelPos(3, row2)].Text = Tmp_PN;
                            sheet2.Range[myfunc.GetExcelPos(4, row2)].Text = Tmp_PNNAME;
                            //製程, 製程資料內容, WBS, 工單類型,  數量, 單位,
                            sheet2.Range[myfunc.GetExcelPos(5, row2)].Text = Tmp_MKNO;
                            sheet2.Range[myfunc.GetExcelPos(6, row2)].Text = Tmp_MKDESCPT;
                            sheet2.Range[myfunc.GetExcelPos(7, row2)].Text = Tmp_WBS;
                            sheet2.Range[myfunc.GetExcelPos(8, row2)].Text = Tmp_SROTP;
                            sheet2.Range[myfunc.GetExcelPos(9, row2)].Text = Tmp_QTY;
                            sheet2.Range[myfunc.GetExcelPos(10, row2)].Text = Tmp_UNIT;
                            //EOECN, 專案,機號,起始值(STARTVAL), 情況處理碼,
                            sheet2.Range[myfunc.GetExcelPos(11, row2)].Text = Tmp_ECNO;
                            sheet2.Range[myfunc.GetExcelPos(12, row2)].Text = Tmp_PROJID;
                            sheet2.Range[myfunc.GetExcelPos(13, row2)].Text = Tmp_ACNO;
                            sheet2.Range[myfunc.GetExcelPos(14, row2)].Text = Tmp_STARTVAL;
                            sheet2.Range[myfunc.GetExcelPos(15, row2)].Text = Tmp_CNDPROCCODE;
                            // 工單報工統計(小時), 工作中心, 工作中心報工統計(小時)
                            sheet2.Range[myfunc.GetExcelPos(16, row2)].Text = Tmp_ALS_HR_;
                            sheet2.Range[myfunc.GetExcelPos(17, row2)].Text = Tmp_WC_;
                            sheet2.Range[myfunc.GetExcelPos(18, row2)].Text = Tmp_WCHR_;
                        } // end of while reader.read()
                    }  // end of for (int i = 0; i < RowsCount; i++)
                    sheet2.AllocatedRange.AutoFitColumns();
                    wk2.SaveToStream(Tmp_out_Stream, FileFormat.Version2010);
                }  //end of foreach (string cur_FName in Request.Files)
            } // end fo try{             
            catch (Exception e)
            {
                //Console.WriteLine(e);
                Tmp_RtnMsg = "錯誤訊息如下:"
                                         + e.Message;
                MyCookie.Value = HttpUtility.UrlEncode(Tmp_RtnMsg);
                HttpContext.Current.Response.Cookies.Add(MyCookie);
                HttpContext.Current.Response.End();
                //throw;
            }
            finally
            {
                wk.Dispose();
                wk2.Dispose();
                conn.Close();
            }
            //return response;
            //Tmp_Cnt = 6;
            Tmp_Str = "已匯出完成!!  (" + row2.ToString() + "筆) <br>"
                            + "檔案名稱(" + Tmp_out_FName + ")";
            //MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_Str));
            MyCookie.Value = HttpUtility.UrlEncode(Tmp_Str);
            HttpContext.Current.Response.Cookies.Add(MyCookie);
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(Tmp_out_FName, System.Text.Encoding.UTF8) + "\"");
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
            HttpContext.Current.Response.BinaryWrite(Tmp_out_Stream.ToArray());
            HttpContext.Current.Response.End();
        }  //  end of  XLSIN2XLSOUT()







2023年3月12日 星期日

V101 – FILEFIELD -檔案元件, [選擇檔案]鈕未顯示 - 上傳檔案

 目的: V101 – FILEFIELD –[選擇檔案]鈕未顯示

處理說明: 設定 [filefield] 元件的 width 即可



2022年9月29日 星期四

Oracle 資料庫 寫入檔案 & 讀取檔案

目的:  Oracle 資料庫  寫入檔案 & 讀取檔案

處理說明: 

參考網址 : https://www.itread01.com/article/1435284825.html

1>Oracle 資料庫 寫入檔案 & 讀取檔案

//新增名稱空間 
using System; 
using System.Data.OracleClient; 
using System.IO; 
using System.Data; 
 
/// <summary> 
/// 把檔案插入資料庫中 
/// </summary> 
/// <param name="filePath">檔名,包含路徑,如c:\temp.rar</param> 
/// <returns></returns> 
public int Insert(string filePath) 
{ 
  string connStr = "data source=orcl;user=mydbuser;password=mydbuser;"; 
  OracleConnection conn = new OracleConnection(connStr); 
  OracleCommand cmd = conn.CreateCommand(); 
 
  //讀取檔案 
  FileStream fs = File.OpenRead(filePath); 
  byte[] buffer = new byte[fs.Length]; 
  fs.Read(buffer, 0, buffer.Length); 
 
  OracleParameter paramFileContent = cmd.CreateParameter(); 
  paramFileContent.OracleType = OracleType.Blob; 
  paramFileContent.ParameterName = "FileContent"; 
  paramFileContent.Direction = ParameterDirection.Input; 
  paramFileContent.Value = buffer; 
  cmd.Parameters.Add(paramFileContent); 
 
  OracleParameter paramFileName = cmd.CreateParameter(); 
  paramFileName.OracleType = OracleType.VarChar; 
  paramFileName.ParameterName = "FileName"; 
  paramFileName.Direction = ParameterDirection.Input; 
  paramFileName.Value = Path.GetFileName(filePath); 
  cmd.Parameters.Add(paramFileName); 
 
  string sqlInsert = "insert into tb_file (file_name, file_content) values (:FileName, :FileContent)"; 
  cmd.CommandText = sqlInsert; 
  cmd.CommandType = CommandType.Text; 
 
  conn.Open(); 
  int result = cmd.ExecuteNonQuery(); 
  conn.Close(); 
 
  return result; 
} 
 
 
/// <summary> 
/// 根據檔名從資料庫中獲取檔案 
/// </summary> 
/// <param name="fileName">資料庫中的檔名</param> 
/// <param name="savePath">檔案的儲存路徑,包括檔名,如c:\file.rar</param> 
public void Select(string fileName, string savePath) 
{ 
  string connStr = "data source=orcl;user=mydbuser;password=mydbuser;"; 
  OracleConnection conn = new OracleConnection(connStr); 
  OracleCommand cmd = conn.CreateCommand(); 
 
  string sqlSelect = "select file_name, file_content from tb_file where file_name=:FileName"; 
  cmd.CommandText = sqlSelect; 
  cmd.CommandType = CommandType.Text; 
 
  OracleParameter paramFileName = cmd.CreateParameter(); 
  paramFileName.OracleType = OracleType.VarChar; 
  paramFileName.ParameterName = "FileName"; 
  paramFileName.Direction = ParameterDirection.Input; 
  paramFileName.Value = fileName; 
  cmd.Parameters.Add(paramFileName);       
 
  conn.Open(); 
  OracleDataReader dr = cmd.ExecuteReader(); 
  dr.Read(); 
  byte[] buffer = (byte[])dr["file_content"]; 
  dr.Close(); 
  conn.Close(); 
 
  //把檔案儲存到指定路徑 
  File.WriteAllBytes(savePath, buffer); 
} 


2>一般的檔案  - 寫入 & 讀取

名稱空間:

using System.IO;

寫文字檔案

StreamWriter sw=File.CreateText("c:\\text.txt");  
sw.WriteLine("C#");                //寫入一行文字 
sw.Write("www.csdn.net");             //在文字末尾寫入文字 
sw.Flush();                    //清空 
sw.Close();                    //關閉 

讀文字檔案

StreamReader sr = File.OpenText("c:\\text.txt"); 
sr.ReadLine();                  //讀取一行資料 
sr.Read();                    //讀取一個字元 
sr.ReadToEnd();                  //從當前位置讀取到文字結束 
sr.Close();                    //釋放資源 

追加文字檔案

StreamWriter sw = File.AppendText("c:\\text.txt"); 
sw.WriteLine("C#");                 //寫入一行文字 
sw.Write("www.csdn.net");              //在文字末尾寫入文字 
sw.Flush();                     //清空 
sw.Close();                     //關閉 

判斷檔案是否存在

File.Exists("c:\\text.txt"); 

刪除檔案

File.Delete("c:\\text.txt"); 

複製檔案

File.Copy("c:\\text.txt", "c:\\copy.txt");   //把c:\\text.txt複製到c:\\copy.txt 

移動檔案

File.Copy("c:\\text.txt", "d:\\text.txt");  //把c:\\text.txt移動到d:\\text.txt 

資料夾建立、移動、刪除

Directory.Delete("c:\\test");       //刪除C盤下的test資料夾 
Directory.CreateDirectory("c:\\test");  //在C盤建立test資料夾 
Directory.Exists("c:\\test");       //驗證C盤test資料夾是否存在 
Directory.Move("c:\\test", "d:\\test");  //把c:\test移動到d:\test