파일권한 에러가 발생을 하더라..
그이유는..
페이지와 내용이 입력될 파일이 같은 폴더일 경우..
보안상의 문제로..
권한 에러가 발생한다..
그러므로..
폴더를 다르게 하면 된다..
오늘의 팁 : 스트림류의 코드 사용시, 페이지와 해당 파일을 같은 폴더에 두지 마라
TextWriter를 구현하여 특정 인코딩의 스트림에 문자를 씁니다.
네임스페이스: System.IO
어셈블리: mscorlib(mscorlib.dll)
Visual Basic(선언) |
<SerializableAttribute> _ <ComVisibleAttribute(True)> _ Public Class StreamWriter Inherits TextWriter |
Visual Basic(사용법) |
Dim instance As StreamWriter |
C# |
[SerializableAttribute] [ComVisibleAttribute(true)] public class StreamWriter : TextWriter |
C++ |
[SerializableAttribute] [ComVisibleAttribute(true)] public ref class StreamWriter : public TextWriter |
J# |
/** @attribute SerializableAttribute() */ /** @attribute ComVisibleAttribute(true) */ public class StreamWriter extends TextWriter |
JScript |
SerializableAttribute ComVisibleAttribute(true) public class StreamWriter extends TextWriter |
StreamWriter는 특정 인코딩의 문자 출력을 위해 설계된 반면 Stream에서 파생된 클래스는 바이트 입력 및 출력을 위해 설계되었습니다.
다르게 지정되지 않은 경우 StreamWriter는 기본적으로 UTF8Encoding의 인스턴스를 사용합니다. UTF8Encoding의 이 인스턴스가 생성되어 Encoding.GetPreamble 메서드는 UTF-8로 작성된 유니코드 바이트 순서 표시를 반환합니다. 기존의 스트림에 추가하지 않는 경우 인코딩의 프리앰블이 스트림에 추가됩니다. 즉, StreamWriter로 만드는 텍스트 파일 맨 처음에는 세 개의 바이트 순서 표시가 나타납니다. UTF-8은 모든 유니코드 문자를 정확하게 처리하고 운영 체제의 지역화된 버전에 일관성 있는 결과를 제공합니다.
기본적으로 StreamWriter는 스레드로부터 안전하지 않습니다. 스레드로부터 안전한 래퍼에 대한 자세한 내용은 TextWriter.Synchronized를 참조하십시오.
다음 코드 예제에서는 텍스트 파일에 텍스트를 쓰는 방법을 보여 줍니다.
첫 번째 예제에서는 기존 파일에 텍스트를 추가하는 방법을 보여 주고 두 번째 예제에서는 새 텍스트 파일을 만들고 이 파일에 문자열을 쓰는 방법을 보여 줍니다. 비슷한 기능을 WriteAllText 메서드에서 제공할 수도 있습니다.
using System; using System.IO; class Test { public static void Main() { // Create an instance of StreamWriter to write text to a file. // The using statement also closes the StreamWriter. using (StreamWriter sw = new StreamWriter("TestFile.txt")) { // Add some text to the file. sw.Write("This is the "); sw.WriteLine("header for the file."); sw.WriteLine("-------------------"); // Arbitrary objects can also be written to the file. sw.Write("The date is: "); sw.WriteLine(DateTime.Now); } } }
Tip : 짧아쒸꾸립뚜에서 replace 함수는 한번만 바꾼다.
그래서~~ 요렇고롬 하면.. 다 바꾸지롱..
Expresstion : replace(/?/g, "");
--> 모든 ? 를 공백으로 바꾸라.
예)
var str = "qwer_1234";
alert(str.replace(/qwer_/g, ""));
결과 : 1234
그런데 이런거는 안되는거야~~
이거는 글쌔...
다시 생각해보기로 하자..
var str = "1|2|3|4|5|6|7|8|9|0";
alert(str.replace(/|/g, ""));
ICallbackEventHandler 인터페이스를 상속받아..
디비에 있는 값을 조회하는 간단한 비동기 예제를 작성해 보겠습니다~~ 꺄아~~
1. *.aspx 페위지 에요~~
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test04.aspx.cs" Inherits="_21_CallBackEventReference_Test04" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>CallBackEvent - DB</title>
<script type="text/jscript" language="javascript">
function CallServerData()
{
var inputValue = document.getElementById("txtMcode").value;
CallServer(inputValue, "");
}
function ReceiveServerData(returnValue)
{
document.getElementById("divR").innerHTML = returnValue;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtMcode" runat="server"></asp:TextBox>
<button onclick="CallServerData()">
[js확인]</button>
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">[cs확인]</asp:LinkButton>
<div runat="server" id="divR" style="color:Red;">
</div>
</div>
</form>
</body>
</html>
------------------------------------------------------------------------------------------------------------
1) 텍스트 박스에 아이디를 입력한다 -> 2) 디비에서 중복 확인을 하고 -> 3) div 에 결과를 출력하는 내용입니다.
CallServerData() 함수는 *.cs 에서 등록하는 콜 서버 메서드를 호출 합니다..
중요한건!! 텍스트 박스의 입력 값이 퐈랴미터로 넘어간다는 것입니다~
ReceiveServerData() 함수는 인자로 결과에 해당하는 인가를 가집니다.
그 결과값은 div 에 보여지구요~
------------------------------------------------------------------------------------------------------------
2. *.aspx.cs 페위지 에요~~
------------------------------------------------------------------------------------------------------------
public partial class _21_CallBackEventReference_Test04 : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
private string strMcode = "";
protected void Page_Load(object sender, EventArgs e)
{
string strReference = Page.ClientScript.GetCallbackEventReference(
this // 해당 페이지
, "arg" // 클라이언트 -> 서버 인수
, "ReceiveServerData" // 클라이언트 처리 함수
, "context" // 콜벡이 시작되기 전의 클라이언트 스크립트
);
//String.Format ..안된다
string strCallBackScript = "function CallServer(arg, context)" + "{ " + strReference + "} ;";
Page.ClientScript.RegisterClientScriptBlock(
this.GetType()
, "CallServer"
, strCallBackScript
, true);
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
string str = checkUserID(txtMcode.Text);
this.divR.InnerHtml = str;
}
private string checkUserID(string strUserID)
{
string strR = String.Empty;
string strQuery = String.Format("SELECT COUNT(0) FROM dbo.TB_Member WHERE MCODE = '{0}'", strUserID);
int intResult = Convert.ToInt32(Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteScalar(
"server=.;database=..;uid=sa;pwd=sa12wer;", CommandType.Text, strQuery));
if (intResult == 0)
{
strR = strUserID + "->사용가능한 아이디";
}
else
{
strR = strUserID + "->사용사용할수없는 아이디";
}
return strR;
}
#region ICallbackEventHandler 멤버
public string GetCallbackResult()
{
string str = checkUserID(strMcode);
return str;
}
public void RaiseCallbackEvent(string eventArgument)
{
strMcode = eventArgument;
}
#endregion
}
------------------------------------------------------------------------------------------------------------
System.Web.UI.ICallbackEventHandler 인터 페이스를 상속 받습니다..
인터페이를 구현하면..
Callback 과 Result 이벤트를 작성해줍니다..
콜백은 호출시 동작,
리절트를 결과값을 반환 합니다..
그리고 디비처리 메서드..
깔끔하게 동작을 하는군요..
^^;;
참고: 이 인터페이스는 .NET Framework 버전 2.0에서 새로 추가되었습니다.
컨트롤이 서버에 대한 콜백 이벤트 대상이 될 수 있음을 나타내는 데 사용됩니다.
네임스페이스: System.Web.UI
어셈블리: System.Web(system.web.dll)
콜백 이벤트를 수신해야 하는 사용자 지정 컨트롤에 대해 ICallbackEventHandler 인터페이스를 구현합니다. 자세한 내용은 ASP.NET 웹 페이지에서 다시 게시하지 않는 클라이언트 콜백 구현을 참조하십시오.
ICallbackEventHandler 인터페이스를 구현하는 컨트롤의 예로는 GridView, DetailsView 및 TreeView 컨트롤이 있습니다. ICallbackEventHandler 인터페이스를 구현하는 컨트롤이 콜백 이벤트의 대상이 되는 경우, RaiseCallbackEvent 메서드가 호출되어 이벤트를 처리하고 이벤트 인수를 매개 변수로 전달하며 GetCallbackResult 메서드는 콜백의 결과를 반환합니다.
콜백을 수행하는 동안 데이터 소스 컨트롤에서 데이터를 검색하는 컨트롤은 이 작업을 동기적으로 또는 비동기적으로 수행할 수 있습니다. GridView, DetailsView 및 TreeView 같은 ASP.NET 컨트롤은 동기적으로 구현됩니다. 비동기 프로그래밍에 대한 자세한 내용은 비동기 프로그래밍 디자인 패턴을 참조하십시오.
ICallbackEventHandler 인터페이스를 구현하는 컨트롤에 의해 렌더링된 사용자 인터페이스에서 콜백 이벤트가 발생할 경우 이 이벤트의 유효성을 검사할지 여부를 지정할 수 있습니다. 이벤트의 유효성 검사는 보안을 위해 유용한 방법입니다. 그러나 성능상의 이유로 이 기능을 사용하지 않을 수 있습니다. 콜백 이벤트에 대해 이벤트 유효성 검사를 수행할지 여부를 제어하려면 @ Page 지시문의 enableEventValidation 특성이나 Web.config 파일에 있는 pages 요소(ASP.NET 설정 스키마)의 enableEventValidation 특성을 설정합니다. 코드에서 EnableEventValidation 속성을 설정할 경우 페이지 처리의 Page_Init 단계에서 설정합니다. 이벤트 유효성 검사의 보안 장점과 성능 저하 사이의 관계를 적절하게 조정하는 방법에 대한 자세한 내용은 고성능 ASP.NET 응용 프로그램 개발을 참조하십시오.
프로토콜 명세
트랙백의 프로토콜은 매우 간단합니다. HTTP의 POST 메쏘드를 통해서 몇 가지 파라미터(매개변수)를 보내고 XML로 된 응답으로 성공, 실패 여부만 판단해주면 됩니다.
트랙백 핑 보내기
트랙백은 기본적으로 HTTP를 이용해서 보내게 됩니다. Trackback 1.0에서는 GET 메쏘드를 이용해서 보내게 되어있지만 현재 쓰이는 1.1에서는 POST 메쏘드를 이용하게 되어 있습니다. Content-Type request header와 url이란 이름의 파라미터는 필수 요소입니다. Content-Type은 항상 appli cation/x-www-form-urlencoded
이어야 하고 파라미터의 charset을 다음과 같이 추가로 지정해줄 수도 있습니다.
◆ Content-Type
application/x-www-form-urlencoded 또는 Content-Type: application/x-www-form-urlencoded; charset=EUC-KR 또는 Content-Type: application/x-www-form-urlencoded; charset=UTF-8
POST request body로 보낼 파라미터들은 <표 1>과 같습니다. 이 트랙백 요청을 보내는 것을 ‘트랙백 핑을 보낸다’라고 합니다. 예를 들어 어떤 글이 http://www.anyblog.com/ tb.cgi/7과 같은 트랙백 URL을 가지고 있다고 한다면 다음과 같은 HTTP 요청으로 그 글에 트랙백 핑을 보낼 수 있습니다. 여기서 트랙백 URL이란 트랙백 핑을 받는 프로그램이 실행되는 URL을 말합니다.
POST /tb.cgi/7 http/1.1
Host: www.anyblog.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 96
title=hello&excerpt=trackback%20test&url=http://www.mtgear.net/archieve/xx.html&blog_name=mtgear
알다시피 HTTP의 POST 메쏘드는 request body를 통해서 파라미터를 전달하고 HTTP request에서 request body가 있을 경우 Content-Length가 request body를 지정해줘야 합니다. 여기서 보내는 사람의 블로그는 mtgear(http:// mtgear .net)이고 제목이 hello라는 글을 쓰면서 글 내용의 발췌인 ‘trackback test’를 http://www.anyblog.com/tb.cgi/7이란 트랙백 URL을 가진 글에 트랙백 핑을 보내는 것입니다. 트랙백 핑을 보낸 후 성공한 경우에는 다음과 같은 응답을 받게 됩니다.
<?xml version=”1.0” encoding=”iso-8859-1”?><response><error>0</error> </response>
실패한 경우에는 다음과 같은 응답을 받게 되고 메시지의 텍스트 요소(text element)를 통해서 오류의 원인을 알 수 있습니다.
<?xml version=”1.0” encoding=”iso-8859-1”?><response><error>1</error> <message>The error message</message></response>
[출처] 가깝고도 먼 이웃 만들기,트랙백 - 1 |작성자 맥스