2012-04-10 18 views
2

を仕事を得ることができない、それだけでは動作しません。File.Copyこれは、別のファイルの場所で、マイクロソフトからのコードサンプルで

string fileName = "test1.txt"; 
string sourcePath = @"C:\"; 
string targetPath = @"C:\Test\"; 

// Use Path class to manipulate file and directory paths. 
string sourceFile = System.IO.Path.Combine(sourcePath, fileName); 
string destFile = System.IO.Path.Combine(targetPath, fileName); 

System.IO.File.Copy(sourceFile, destFile, true); 

それはソースを見つけることができませんファイル。私はブレークポイントを設定した場合、これは私が得るものです:

args {string[0]} string[] 
    fileName "test1.txt" string 
    sourcePath "C:\\" string 
    targetPath "C:\\Test\\" string 
    sourceFile "C:\\test1.txt" string 
    destFile "C:\\Test\\test1.txt" string 

そのまま文字列が使用されているにもかかわらず、バックスラッシュを倍増さのようなので、それが見えます。 (私はtest1.txtファイルをC言語で持っていることは間違いありません:)ありがとう!

+3

例外メッセージとスタックトレースとは何ですか? – SLaks

+3

バックスラッシュの倍増は表示用です。どのようなエラーメッセージが表示されますか? –

+0

例外テキストを投稿してください。ダブルバックスラッシュは問題ありません。 – Matten

答えて

0

倍増が、私はあなたの問題は、ファイル名だと思う 、正しいです。 その操作せずにファイルを読み取ろうとしていますが、あなたはファイル名がtest1.txt.txtしなければならないよりも:)

+0

ありがとう、ありがとう、それは問題でした! – MariusD

3

ダブルバックスラッシュは、文字列のバックスラッシュを表す通常の方法です。 @を使用すると、エスケープシーケンスを解釈したくないと言っています(詳細についてはhereを参照してください)

したがって、問題は異なります。 C:\ test1.txtとC:\ Testは存在しますか? targetPathに書き込む権限がありますか?

(例外処理や複数の誤り、必要に応じてチェックを追加)以下のことを試してみてください

if (!Directory.Exists(targetPath)) { 
    Directory.CreateDirectory(targetPath); 
} 
if (File.Exists(sourceFile)) { 
    File.Copy(sourceFile,destFile,true); 
} 
+1

確かにこれはコメントではなく、答えです! – SkonJeet

+0

これはトップの投票回答と同じ提案をしています...そしてダブルバックスラッシュをより詳細に明らかにします –

+0

David Heffernanは問題の可能性のあるすべての原因をカバーしています - そうするためにOPからの詳細な情報を要求していますこれがアクセスの問題である可能性について言及していませんでした。 OPのコメントの他の誰もがあなたの「答え」にあるすべてのものをカバーしていますが、正しいものとしてマークされた担当者を得る機会はありません。公正ではないようです。 – SkonJeet

5

3つの一般的な故障モードがあります。

  1. 存在しないC:\test1.txtソースファイルが。
  2. 宛先ファイルC:\Test\test1.txtは存在しますが、読み取り専用です。
  3. 宛先ディレクトリC:\Testは存在しません。

私の推測では、アイテム3が問題であり、その場合は、File.Copyに電話する前に宛先ディレクトリが存在することを確認する必要があります。この場合、DirectoryNotFoundExceptionが表示されます。 Directory.CreateDirectoryを使用して、宛先ディレクトリが存在することを確認できます。

+0

4. C:\が存在しない/アクセスできない(わかりません) – SkonJeet

+1

@SkonJeet Item 1はその可能性をカバーしています。 –

+0

True true、+1 .. – SkonJeet

0

あなたがトラブルしようとすると、この例を見てを持っている場合は、次から撮影

using System; 
using System.IO; 
class Test 
{ 
    public static void Main() 
    { 
     string path = @"c:\temp\MyTest.txt"; 
     string path2 = path + "temp"; 

     try 
     { 
      // Create the file and clean up handles. 
      using (FileStream fs = File.Create(path)) {} 

      // Ensure that the target does not exist. 
      File.Delete(path2); 

      // Copy the file. 
      File.Copy(path, path2); 
      Console.WriteLine("{0} copied to {1}", path, path2); 

      // Try to copy the same file again, which should succeed. 
      File.Copy(path, path2, true); 
      Console.WriteLine("The second Copy operation succeeded, which was expected."); 
     } 

     catch 
     { 
      Console.WriteLine("Double copy is not allowed, which was not expected."); 
     } 
    } 
} 

:バックスラッシュのhttp://msdn.microsoft.com/en-us/library/system.io.file.copy(v=vs.71).aspx

0

をうまくいかない正確に何を参照するには行った場合、あなたが包むことができ、「知られているタイプのためExtenstionsを非表示にする」かどうかを確認する前に、 try-catchブロック内のコード:

try { // Code that can throw an exception } 
catch (Exception ex) 
{ 
    // Show what went wrong 
    // Use Console.Write() if you are using a console 
    MessageBox.Show(ex.Message, "Error!"); 
} 

最も可能性の問題が欠落しているソースファイルは、インストール先のフォルダが存在しないか、その場所にアクセスする権限がありません。

Windows 7では、オペレーティングシステムがインストールされているドライブのルート(通常c:\)に直接書き込むには、管理者権限が必要です。 ファイルを書き込もうとしたり、その場所にディレクトリを作成しようとすると失敗する可能性があるので、別の場所を使用することをお勧めします。