File | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar file

ASP.NET MVC ile resim içerisine metin gömme (Steganography)

01 October 2016 Yorum yapılmamış

Aldığım ilginç bir maili cevaplarken internette Steganography diye birşeye denk geldim. Bir resmin pixellerinin renk değerlerini bir metni veya dosyayı içerecek şekilde değiştirmeye ve böylece resim ile birlikte gizlice metin veya dosya transfer etme anlamına geliyor.

Aşağıdaki youtube video‘sunda Visual Studio içerisinde bir ASP.NET MVC projesi oluşturacak, dosya upload edecek bir html sayfası oluşturacak, upload edilen resmin içerisine istediğimiz metni gizleyeceğiz.

Öncelikle Index.cshtml içerisine aşağıdaki html kodlarını yazalım;

HomeController.cs dosyasına aşağıda kodlarını bulacağınız Index() action ekleyelim;

Video‘da kullandığım PowerPoint sunumuna aşağıdan erişebilirsiniz.


Windows 8 Metro Style ilk uygulamamız

07 October 2011 1 yorum

Windows 8 Programlama makalelerinde ilk uygulamamızı geliştirmeye başlıyoruz.

Windows 8 Başlangıç Ekranımızda (Start Screen) Visual Studio 2011 üzerine tıklayarak, yeni bir Visual Studio 2011 başlatıyoruz.

File / New / Project menüsünden Windows Metro Style kategorisindeki Application proje şablonunu seçiyoruz ve MetroStyleIlkUygulama ismini vererek projemizi oluşturuyoruz.

Proje oluşturulduğunda Visual Studio 2011 varsayılan olarak MainPage.xaml dosyasını açıyor. Uygulamamızın başlangıç ekranı varsayılan olarak MainPage.xaml dosyasıdır.

Grid elementi içerisine bir button, bir de label eklemek için aşağıdaki satırları yazıyoruz;

<Button Content="Mesaj Göster" FontSize="28" Width="250" Height="80" HorizontalAlignment="Center" />
<TextBlock x:Name="MessageText" FontSize="48" Foreground="White" />

WPF ve Silverlight‘ta Label nesnesi oluşturmak için TextBlock nesnesi kullanmamız gerekiyor. Bu elementler ile ekranımıza Mesaj Göster metinli bir button ve metin içermediği için ekranda gözükmeyen bir textblock nesnesi koymuş olduk.

Fakat bu kontrolleri ekranda ortalayabilmek için bir StackPanel içerisine koymamız gerekiyor;

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
	<Button Content="Mesaj Göster" FontSize="28" Width="250" Height="80" HorizontalAlignment="Center" />
	<TextBlock x:Name="MessageText" FontSize="48" Foreground="White" />
</StackPanel>

StackPanel ve Button elemanlarına verdiğimiz Alignment özellikleri sayesinde elemanları ekranda ortalıyoruz.

Son olarak Button element’imize

Click="Button_Click"

özelliğini ekleyelim. Böylece butona tıklanma event‘i ile tetiklenen bir method‘umuz oluyor.

MainPage.xaml.cs dosyasına;

private void Button_Click(object sender, RoutedEventArgs e)
{
	MessageText.Text = "Windows 8 üzerinde çalışan\r\nilk uygulamamız!!";
}

method’unu ekliyoruz.

Son olarak F5 tuşuna basarak projeyi test amaçlı çalıştırıyoruz. Uygulama açılışında ilk önce bekleme ekranı ekrana geliyor.

Fakat çok kısa süre içerisinde ilk ekranımız açılıyor.

Butona tıkladığımızda TextBlock metin ile doluyor.

Kodların tamamı;

<UserControl x:Class="MetroStyleIlkUygulama.MainPage"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	mc:Ignorable="d"
	d:DesignHeight="768" d:DesignWidth="1366">

<Grid x:Name="LayoutRoot" Background="#FF0C0C0C">
	<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
		<Button Content="Mesaj Göster" FontSize="28" Width="250" Height="80" HorizontalAlignment="Center" Click="Button_Click" />
		<TextBlock x:Name="MessageText" FontSize="48" Foreground="White" />
	</StackPanel>
</Grid>

</UserControl>

Bu kodda ne yanlış var? – 9

20 August 2011 12 yorum

Geliştirmekte olduğumuz bir projede C:\ sürücüsünde bulunan OnemliDosya.xls dosyasını sıkışırmamız ve OnemliDosya.zip dosyasını oluşturmamız istendi.

Hemen arkasından sıkıştırdığımız dosyayı açmamız ve OnemliDosya.Yeni.xls dosyasını oluşturmamız bekleniyor.

Aşağıdaki method’ları bu görev için yazdık;

public static void Compress(string ZiplenecekDosyaAdi, string ZipDosyaAdi)
{
	FileStream InputStream = File.Open(ZiplenecekDosyaAdi, FileMode.Open);
	FileStream OutputStream = File.Open(ZipDosyaAdi, FileMode.Create);
	GZipStream ZipStream = new GZipStream(OutputStream, CompressionMode.Compress);

	try
	{
		byte[] Buffer = new byte[InputStream.Length];
		InputStream.Read(Buffer, 0, Buffer.Length);
		ZipStream.Write(Buffer, 0, Buffer.Length);
	}
	finally
	{
		OutputStream.Close();
		InputStream.Close();
	}
}

public static void Decompress(string ZiplenecekDosyaAdi, string ZipDosyaAdi)
{
	FileStream Input = File.Open(ZiplenecekDosyaAdi, FileMode.Open);
	FileStream Output = File.Open(ZipDosyaAdi, FileMode.Create);
	GZipStream ZipStream = new GZipStream(Input, CompressionMode.Decompress);

	try
	{
		int Data = ZipStream.ReadByte();
		while (Data > 0)
		{
			Output.WriteByte((byte)Data);
			Data = ZipStream.ReadByte();
		}
	}
	finally
	{
		Output.Close();
		Input.Close();
	}
}

Yazdığımız method’ları aşağıdaki gibi kullanıyoruz;

Compress("C:\\OnemliDosya.xls", "C:\\OnemliDosya.zip");
Decompress("C:\\OnemliDosya.zip", "C:\\OnemliDosya.Yeni.xls");

Kodumuzdan emin olmamıza rağmen, çalışmadığını farkediyoruz.

Sizce problem nedir ve nasıl düzeltilebilir?

C# ile Geçici Dosya (Temporary File) oluşturma sınıfı yazalım

13 July 2011 Yorum yapılmamış

Projelerimizde dosya sistemi üzerinde geçici olarak dosya oluşturma ve işimiz bittiğinde silme ihtiyacı hissedebiliriz.

Bu yazıyı okumadan önce Hem benzersiz hem de geçici dosya oluşturmanın en kolay yolu ve C# ile Geçici Dosya Oluşturmak başlıklı yazılarımı okumanızı öneririm.

Bu linkte bulduğum yöntemi çok kullanışlı buldum ve sizler (aynı zamanda kendim) için türkçeleştirdim;

public class TempFile : IDisposable
{
	public TempFile() : this(string.Empty)
	{ }

	private readonly string _tmpfile;

	public TempFile(string extension)
	{
		_tmpfile = Path.GetTempFileName();

		if (!string.IsNullOrEmpty(extension))
		{
			string newTmpFile = _tmpfile + extension;

			/// Yeni bir geçici dosya oluşturulur
			File.Create(newTmpFile, 0);
			/// Eski geçici dosya silinmediyse, silinir.
			File.Delete(_tmpfile);

			/// Yeni oluşturulan geçici dosya kullanıma hazır!
			_tmpfile = newTmpFile;
		}
	}

	public string FullPath
	{
		get { return _tmpfile; }
	}

	void IDisposable.Dispose()
	{
		if (!string.IsNullOrEmpty(_tmpfile) && File.Exists(_tmpfile))
		{
			File.Delete(_tmpfile);
		}
	}
}

Kullanımına örnek;

using(TempFile tmp = new TempFile(".dat")) /// dat uzantılı bir geçici dosya oluşturuluyor
{
	/// FullPath özelliğinden geçici dosyanın yolu ve dosya adı alınabilir;
	string filename = tmp.FullPath;
}

Dosya uzantısını uygulamanız ile ilişkilendirin

30 September 2010 4 yorum

Bir windows uygulaması geliştirdiniz ve uygulamanız belli uzantıdaki dosyalar üzerinde işlemler gerçekleştiriyor (Görüntüleme, Kaydetme, vs.)

Eğer ilgili uzantıdaki dosyaya çift tıklandığı zaman uygulamanızın açılmasını ve dosya üzerinde işlem yapmasını istiyorsanız, öncelikle dosya uzantısı ve uygulamanızı registry üzerinden birbiri ile ilişkilendirmelisiniz.

Aşağıdaki örnek kod sayesinde, eng uzantılı dosyaların uygulamanız ile ilişkilendirilmesini ve dosya ikonlarının sizin belirlediğiniz (icon.ico) olarak gözükmesini sağlayabilirsiniz;

Registry.ClassesRoot.CreateSubKey(".eng").SetValue(null, "EnginDosyasi.eng");

RegistryKey rk = Registry.ClassesRoot.CreateSubKey("EnginDosyasi.eng");
rk.CreateSubKey("DefaultIcon").SetValue(null, Application.StartupPath + "\\icon.ico");
rk.CreateSubKey(@"shell\open\command").SetValue(null, "\"" + Application.ExecutablePath + "\" \"%1\"");

eng uzantılı bir dosyaya çift tıklandığında artık sizin uygulamanız açılacaktır.

Çift tıklandığı için uygulamanızı açtıran dosyaya, aşağıdaki kod satırı ile ulaşabilirsiniz;

public static void Main(string[] args)
{
	string Dosya = args[1];
}