Criar, duplicar, excluir, mover e renomear arquivos
resumo
Execute várias operações, como "Criar", "Duplicar", "Excluir" e "Mover" no arquivo.
Ambiente operacional
Pré-requisitos
Versões do XNA suportadas |
|
Plataformas suportadas |
|
Versão do sombreador de vértice necessária para Windows | 1.1 |
Versão do sombreador de pixel necessária para Windows | 1.1 |
Ambiente operacional
plataforma |
Como trabalhar com a amostra
Teclado de trabalhoControle Xbox | 360mouse | ||
---|---|---|---|
Criar um arquivo "SampleA" | Um | Um | - |
Duplique o arquivo "SampleA" como o arquivo "SampleB" | B | B | - |
Exclua o arquivo "SampleB" | X | X | - |
Mova (renomeie) o arquivo "SampleA" para o arquivo "SampleB" | Y | Y | - |
substância
Criar um arquivo
Se você simplesmente deseja criar um arquivo, use o método "File.Create". Especifique o caminho do arquivo a ser criado no primeiro argumento.
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);
}
Quando você cria um arquivo, uma instância do fluxo de arquivos aberto (FileStream) é retornada, portanto, você deve ler e gravar o arquivo, se necessário, e fechar o fluxo no final.
Além disso, se já houver um arquivo no caminho do arquivo que você está tentando criar, o método File.Create gerará uma exceção. Se você quiser especificar o número de bytes no arquivo a ser criado, as permissões de acesso e assim por diante, use os métodos sobrecarregados do método File.Create.
File.Create
método
Cria um arquivo no caminho especificado.
caminho | corda | O caminho e o nome do arquivo a ser criado. |
Valores retornados | Fluxo de arquivos | Um FileStream que fornece acesso de leitura/gravação ao arquivo especificado pelo caminho. |
Duplicação de arquivos
Para duplicar um arquivo, use o método File.Copy. O primeiro argumento especifica o caminho do arquivo de origem e o segundo argumento especifica o caminho do arquivo de destino.
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);
}
Se o arquivo não existir na origem, se você não tiver acesso ao arquivo ou se houver um arquivo no destino, o método File.Copy gerará uma exceção. Se você quiser substituir um arquivo, use uma sobrecarga do mesmo método, "File.Copy(String, String, Boolean)".
File.Copy
método
Copie o arquivo existente para o novo arquivo. Não é possível substituir um arquivo com o mesmo nome.
nome_do_arquivo_fonte | corda | O caminho do arquivo a partir do qual duplicar. |
destFileName | corda | O nome do arquivo de destino. Você não pode usar um diretório ou um arquivo existente. |
Excluindo um arquivo
Para excluir um arquivo, use o método "File.Delete". Especifique o caminho do arquivo a ser excluído no primeiro argumento.
try
{
// 「SampleB.txt」を削除
File.Delete(sampleBFilePath);
// 操作日時
this.deleteFileDateTime = DateTime.Now;
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex);
}
Se não houver arquivos para excluir originalmente, esse método não gerará uma exceção.
File.Delete
método
Copie o arquivo existente para o novo arquivo. Não é possível substituir um arquivo com o mesmo nome.
caminho | corda | O nome do arquivo a ser excluído. |
Movendo (renomeando) arquivos
Se você quiser mover um arquivo para outra pasta ou alterar o nome do arquivo, use o método "File.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);
}
Lança uma exceção se não houver arquivos na origem ou se houver arquivos no destino.
File.Move
método
Move o arquivo especificado para um novo local.
nome_do_arquivo_fonte | corda | O nome do arquivo a ser movido. |
destFileName | corda | O novo caminho do arquivo. |
Todos os códigos
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);
}
}
}