فائلوں کو بنانا ، نقل کرنا ، حذف کرنا ، منتقل کرنا اور نام تبدیل کرنا
خلاصہ
فائل پر "تخلیق کریں"، "ڈپلیکیٹ"، "حذف کریں"، اور "منتقل کریں" جیسے مختلف آپریشن انجام دیں۔
آپریٹنگ ماحول
ضروری شرائط
| XNA ورژن کی حمایت کی |
|
| حمایت یافتہ پلیٹ فارم |
|
| Windows Required Vertex Shader Version | 1.1 |
| Windows Required پکسل شادer Version | 1.1 |
آپریٹنگ ماحول
| پلیٹ فارم |
نمونے کے ساتھ کیسے کام کریں
| کی بورڈ ایکس باکس | 360 کنٹرولر ماؤس پر کام کرتا ہے | ||
|---|---|---|---|
| "SampleA" فائل بنائیں | ایک | ایک | - |
| "نمونہ اے" فائل کو "نمونہ بی" فائل کے طور پر نقل کریں | B | B | - |
| "سیمپل بی" فائل حذف کریں | X | X | - |
| "سیمپل اے" فائل کو "سیمپل بی" فائل میں منتقل کریں (نام تبدیل کریں) | Y | Y | - |
مادہ
ایک فائل بنائیں
اگر آپ صرف فائل بنانا چاہتے ہیں تو ، "فائل بنائیں" کا طریقہ استعمال کریں۔ پہلی دلیل میں بنائی جانے والی فائل کے راستے کی وضاحت کریں۔
try
{
if (File.Exists(sampleAFilePath) == false)
{
// 「SampleA.txt」の作成
using (FileStream stream = File.Create(sampleAFilePath))
{
// 操作日時
this.createFileDateTime = DateTime.Now;
// ストリームを閉じる
stream.Close();
}
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex);
}
جب آپ فائل بناتے ہیں تو ، کھلی فائل اسٹریم (فائل اسٹریم) کی ایک مثال واپس کردی جاتی ہے ، لہذا اگر ضروری ہو تو آپ کو فائل کو پڑھنا اور لکھنا چاہئے ، اور پھر آخر میں اسٹریم کو بند کرنا چاہئے۔
اس کے علاوہ ، اگر آپ جس فائل پتھ پر پہلے سے ہی کوئی فائل بنانے کی کوشش کر رہے ہیں تو ، فائل بنائیں کا طریقہ ایک استثناء پھینکتا ہے۔ اگر آپ فائل تخلیق کی جانے والی فائل میں بائٹس کی تعداد کی وضاحت کرنا چاہتے ہیں تو ، رسائی کی اجازتیں ، وغیرہ ، فائل تخلیق کے طریقہ کار کے اوور لوڈڈ طریقوں کا استعمال کریں۔
File.Create طریقہ
مخصوص راستے میں ایک فائل بناتا ہے۔
| راہ | ڈوری | بنائی جانے والی فائل کا راستہ اور نام۔ |
| واپسی کی اقدار | FileStream | ایک فائل اسٹریم جو راستے کے ذریعہ متعین کردہ فائل تک پڑھنے / لکھنے تک رسائی فراہم کرتا ہے۔ |
فائلوں کو نقل کرنا
کسی فائل کی نقل کرنے کے لئے ، فائل کاپی کا طریقہ استعمال کریں۔ پہلی دلیل ماخذ فائل کے راستے کی وضاحت کرتی ہے ، اور دوسری دلیل منزل فائل کے راستے کی وضاحت کرتی ہے۔
try
{
if (File.Exists(sampleAFilePath) == true &&
File.Exists(sampleBFilePath) == false)
{
// 「SampleA.txt」を「SampleB.txt」に複製
File.Copy(sampleAFilePath, sampleBFilePath);
// 操作日時
this.copyFileDateTime = DateTime.Now;
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex);
}
اگر فائل ماخذ پر موجود نہیں ہے ، یا اگر آپ کے پاس فائل تک رسائی نہیں ہے ، یا اگر منزل پر کوئی فائل موجود ہے تو ، فائل کاپی کا طریقہ ایک استثناء دیتا ہے۔ اگر آپ کسی فائل کو اوور رائٹ کرنا چاہتے ہیں تو ، اسی طریقہ کار کا اوور لوڈ استعمال کریں ، "فائل کاپی (سٹرنگ ، سٹرنگ ، بولین)"۔
File.Copy طریقہ
موجودہ فائل کو نئی فائل میں کاپی کریں۔ آپ اسی نام کے ساتھ کسی فائل کو اوور رائٹ نہیں کرسکتے ہیں۔
| sourceFileName | ڈوری | فائل کا راستہ جس سے نقل کرنا ہے۔ |
| destFileName | ڈوری | منزل کی فائل کا نام۔ آپ ڈائریکٹری یا موجودہ فائل استعمال نہیں کرسکتے ہیں۔ |
کسی فائل کو حذف کرنا
کسی فائل کو حذف کرنے کے لئے ، "فائل.حذف" طریقہ استعمال کریں۔ پہلی دلیل میں حذف کی جانے والی فائل کے راستے کی وضاحت کریں۔
try
{
// 「SampleB.txt」を削除
File.Delete(sampleBFilePath);
// 操作日時
this.deleteFileDateTime = DateTime.Now;
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex);
}
اگر اصل میں حذف کرنے کے لئے کوئی فائلیں نہیں تھیں تو ، یہ طریقہ کوئی استثنا نہیں دیتا ہے۔
File.Delete طریقہ
موجودہ فائل کو نئی فائل میں کاپی کریں۔ آپ اسی نام کے ساتھ کسی فائل کو اوور رائٹ نہیں کرسکتے ہیں۔
| راہ | ڈوری | حذف کرنے کے لئے فائل کا نام۔ |
فائلوں کو منتقل کرنا (نام تبدیل کرنا)
اگر آپ کسی فائل کو کسی دوسرے فولڈر میں منتقل کرنا چاہتے ہیں یا فائل کا نام تبدیل کرنا چاہتے ہیں تو ، "فائل.موو" طریقہ استعمال کریں۔
try
{
if (File.Exists(sampleAFilePath) == true &&
File.Exists(sampleBFilePath) == false)
{
// 「SampleA.txt」を「SampleB.txt」に移動(リネーム)
File.Move(sampleAFilePath, sampleBFilePath);
// 操作日時
this.moveFileDateTime = DateTime.Now;
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex);
}
اگر ماخذ پر فائلیں نہیں ہیں یا اگر منزل پر فائلیں موجود ہیں تو ایک استثناء پھینکتا ہے۔
File.Move طریقہ
متعین کردہ فائل کو کسی نئے مقام پر منتقل کریں۔
| sourceFileName | ڈوری | منتقل کی جانے والی فائل کا نام۔ |
| destFileName | ڈوری | فائل کا نیا راستہ۔ |
تمام کوڈز
using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
namespace FileOperation
{
<summary>
ゲームメインクラス
</summary>
public class GameMain : Microsoft.Xna.Framework.Game
{
<summary>
ファイル操作の種類
</summary>
enum FileOperationType
{
None,
Create,
Copy,
Delete,
Move
}
<summary>
グラフィックデバイス管理クラス
</summary>
private GraphicsDeviceManager graphics = null;
<summary>
スプライトのバッチ化クラス
</summary>
private SpriteBatch spriteBatch = null;
<summary>
スプライトでテキストを描画するためのフォント
</summary>
private SpriteFont font = null;
<summary>
ファイルを作成した日時
</summary>
private DateTime createFileDateTime = new DateTime();
<summary>
ファイルを複製した日時
</summary>
private DateTime copyFileDateTime = new DateTime();
<summary>
ファイルを削除した日時
</summary>
private DateTime deleteFileDateTime = new DateTime();
<summary>
ファイルを移動した日時
</summary>
private DateTime moveFileDateTime = new DateTime();
<summary>
「SampleA.txt」ファイルが存在するか
</summary>
private bool? isExistSampleAFile = null;
<summary>
「SampleB.txt」ファイルが存在するか
</summary>
private bool? isExistSampleBFile = null;
<summary>
行おうとするファイル操作の種類
</summary>
private FileOperationType operationType = FileOperationType.None;
<summary>
直線のキーボード入力の状態
</summary>
private KeyboardState oldKeyboardState = new KeyboardState();
<summary>
直線のゲームパッド入力の状態
</summary>
private GamePadState oldGamePadState = new GamePadState();
<summary>
GameMain コンストラクタ
</summary>
public GameMain()
{
// グラフィックデバイス管理クラスの作成
this.graphics = new GraphicsDeviceManager(this);
// ゲームコンテンツのルートディレクトリを設定
this.Content.RootDirectory = "Content";
// ゲームサービスコンポーネントを追加
this.Components.Add(new GamerServicesComponent(this));
}
<summary>
ゲームが始まる前の初期化処理を行うメソッド
グラフィック以外のデータの読み込み、コンポーネントの初期化を行う
</summary>
protected override void Initialize()
{
// TODO: ここに初期化ロジックを書いてください
// コンポーネントの初期化などを行います
base.Initialize();
}
<summary>
ゲームが始まるときに一回だけ呼ばれ
すべてのゲームコンテンツを読み込みます
</summary>
protected override void LoadContent()
{
// テクスチャーを描画するためのスプライトバッチクラスを作成します
this.spriteBatch = new SpriteBatch(this.GraphicsDevice);
// フォントをコンテンツパイプラインから読み込む
this.font = this.Content.Load<SpriteFont>("Font");
}
<summary>
ゲームが終了するときに一回だけ呼ばれ
すべてのゲームコンテンツをアンロードします
</summary>
protected override void UnloadContent()
{
// TODO: ContentManager で管理されていないコンテンツを
// ここでアンロードしてください
}
<summary>
描画以外のデータ更新等の処理を行うメソッド
主に入力処理、衝突判定などの物理計算、オーディオの再生など
</summary>
<param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
protected override void Update(GameTime gameTime)
{
// キーボードの情報取得
KeyboardState keyboardState = Keyboard.GetState();
// ゲームパッドの情報取得
GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);
// Xbox360 コントローラの BACK ボタンを押したときにゲームを終了させます
if (gamePadState.Buttons.Back == ButtonState.Pressed)
{
this.Exit();
}
if ((keyboardState.IsKeyDown(Keys.A) && this.oldKeyboardState.IsKeyUp(Keys.A)) ||
(gamePadState.Buttons.A == ButtonState.Pressed &&
this.oldGamePadState.Buttons.A == ButtonState.Released))
{
// A ボタンが押されたとき /////
// ファイル作成操作
this.operationType = FileOperationType.Create;
// ストレージデバイス選択UIを表示するための設定を行います
Guide.BeginShowStorageDeviceSelector(this.GetStorageDevice, null);
}
else if ((keyboardState.IsKeyDown(Keys.B) && this.oldKeyboardState.IsKeyUp(Keys.B)) ||
(gamePadState.Buttons.B == ButtonState.Pressed &&
this.oldGamePadState.Buttons.B == ButtonState.Released))
{
// B ボタンが押されたとき /////
// ファイル複製操作
this.operationType = FileOperationType.Copy;
// ストレージデバイス選択UIを表示するための設定を行います
Guide.BeginShowStorageDeviceSelector(this.GetStorageDevice, null);
}
else if ((keyboardState.IsKeyDown(Keys.X) && this.oldKeyboardState.IsKeyUp(Keys.X)) ||
(gamePadState.Buttons.X == ButtonState.Pressed &&
this.oldGamePadState.Buttons.X == ButtonState.Released))
{
// X ボタンが押されたとき /////
// ファイル削除操作
this.operationType = FileOperationType.Delete;
// ストレージデバイス選択UIを表示するための設定を行います
Guide.BeginShowStorageDeviceSelector(this.GetStorageDevice, null);
}
else if ((keyboardState.IsKeyDown(Keys.Y) && this.oldKeyboardState.IsKeyUp(Keys.Y)) ||
(gamePadState.Buttons.Y == ButtonState.Pressed &&
this.oldGamePadState.Buttons.Y == ButtonState.Released))
{
// Y ボタンが押されたとき /////
// ファイル移動操作
this.operationType = FileOperationType.Move;
// ストレージデバイス選択UIを表示するための設定を行います
Guide.BeginShowStorageDeviceSelector(this.GetStorageDevice, null);
}
// 入力情報を記憶
this.oldKeyboardState = keyboardState;
this.oldGamePadState = gamePadState;
// 登録された GameComponent を更新する
base.Update(gameTime);
}
<summary>
ストレージデバイスを取得するために呼ばれる
</summary>
<param name="result">非同期処理の結果</param>
private void GetStorageDevice(IAsyncResult result)
{
// 結果をもとにストレージデバイスの選択UIを終了してストレージデバイスを取得します
StorageDevice storageDevice = Guide.EndShowStorageDeviceSelector(result);
if (storageDevice != null && storageDevice.IsConnected)
{
// ストレージデバイスの取得に成功し、接続されている場合 /////
// ストレージコンテナを開きます
using (StorageContainer container = storageDevice.OpenContainer("XNASample"))
{
// ファイルパス
string sampleAFilePath = Path.Combine(container.Path, "SampleA.txt");
string sampleBFilePath = Path.Combine(container.Path, "SampleB.txt");
switch (this.operationType)
{
case FileOperationType.Create:
try
{
if (File.Exists(sampleAFilePath) == false)
{
// 「SampleA.txt」の作成
using (FileStream stream = File.Create(sampleAFilePath))
{
// 操作日時
this.createFileDateTime = DateTime.Now;
// ストリームを閉じる
stream.Close();
}
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex);
}
break;
case FileOperationType.Copy:
try
{
if (File.Exists(sampleAFilePath) == true &&
File.Exists(sampleBFilePath) == false)
{
// 「SampleA.txt」を「SampleB.txt」に複製
File.Copy(sampleAFilePath, sampleBFilePath);
// 操作日時
this.copyFileDateTime = DateTime.Now;
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex);
}
break;
case FileOperationType.Delete:
try
{
// 「SampleB.txt」を削除
File.Delete(sampleBFilePath);
// 操作日時
this.deleteFileDateTime = DateTime.Now;
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex);
}
break;
case FileOperationType.Move:
try
{
if (File.Exists(sampleAFilePath) == true &&
File.Exists(sampleBFilePath) == false)
{
// 「SampleA.txt」を「SampleB.txt」に移動(リネーム)
File.Move(sampleAFilePath, sampleBFilePath);
// 操作日時
this.moveFileDateTime = DateTime.Now;
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex);
}
break;
}
// 各ファイルの存在確認
this.isExistSampleAFile = File.Exists(sampleAFilePath);
this.isExistSampleBFile = File.Exists(sampleBFilePath);
}
}
}
<summary>
描画処理を行うメソッド
</summary>
<param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
protected override void Draw(GameTime gameTime)
{
// 画面を指定した色でクリアします
this.GraphicsDevice.Clear(Color.CornflowerBlue);
// スプライトの描画準備
this.spriteBatch.Begin();
// テキスト描画
this.spriteBatch.DrawString(this.font,
"A : Create 'SampleA.txt'\r\n" +
"B : Copy 'SampleA.txt' to 'SampleB.txt'\r\n" +
"X : Delete 'SampleB.txt'\r\n" +
"Y : Move 'SampleA.txt' to 'SampleB.txt'",
new Vector2(50.0f, 50.0f), Color.White);
// ファイル作成時間
string createFileText = "CreateFile : ";
if (this.createFileDateTime.Ticks != 0)
{
createFileText += this.createFileDateTime;
}
else
{
createFileText += "?";
}
this.spriteBatch.DrawString(this.font, createFileText,
new Vector2(50.0f, 130.0f), Color.White);
// ファイル複製時間
string copyFileText = "CopyFile : ";
if (this.copyFileDateTime.Ticks != 0)
{
copyFileText += this.copyFileDateTime;
}
else
{
copyFileText += "?";
}
this.spriteBatch.DrawString(this.font, copyFileText,
new Vector2(50.0f, 150.0f), Color.White);
// ファイル削除時間
string deleteFileText = "DeleteFile : ";
if (this.deleteFileDateTime.Ticks != 0)
{
deleteFileText += this.deleteFileDateTime;
}
else
{
deleteFileText += "?";
}
this.spriteBatch.DrawString(this.font, deleteFileText,
new Vector2(50.0f, 170.0f), Color.White);
// ファイル移動時間
string moveFileText = "MoveFile : ";
if (this.moveFileDateTime.Ticks != 0)
{
moveFileText += this.moveFileDateTime;
}
else
{
moveFileText += "?";
}
this.spriteBatch.DrawString(this.font, moveFileText,
new Vector2(50.0f, 190.0f), Color.White);
// 「SampleA.txt」の存在確認
string sampleAFileText = "SampleA.txt Exist : ";
if (this.isExistSampleAFile != null)
{
sampleAFileText += this.isExistSampleAFile;
}
else
{
sampleAFileText += "?";
}
this.spriteBatch.DrawString(this.font, sampleAFileText,
new Vector2(50.0f, 220.0f), Color.White);
// 「SampleB.txt」の存在確認
string sampleBFileText = "SampleB.txt Exist : ";
if (this.isExistSampleBFile != null)
{
sampleBFileText += this.isExistSampleBFile;
}
else
{
sampleBFileText += "?";
}
this.spriteBatch.DrawString(this.font, sampleBFileText,
new Vector2(50.0f, 240.0f), Color.White);
// スプライトの一括描画
this.spriteBatch.End();
// 登録された DrawableGameComponent を描画する
base.Draw(gameTime);
}
}
}