2009-03-23 11 views
3

一時ディレクトリにファイルを書き込んだ後、永続的な場所にコピーするコードを書きましたが、そのようにするとコピーコマンドにアクセス権関連のエラーが発生することがわかりました。コードは次のようになります。temp以外のディレクトリに一時ファイルを作成するにはどうすればよいですか?

string tempPath = Path.GetTempFileName(); 
Stream theStream = new FileStream(tempPath, FileMode.Create); 

    // Do stuff. 

    File.Copy(tempPath, _CMan.SavePath, true); 
    File.Delete(tempPath); 

私は薄暗く、私がパラメータとして渡された指定したディレクトリに一時ファイルを作成することができますAPI呼び出しがあることを覚えておいてください。しかし、それは私のVBの6日間の暗い記憶です。

Windowsで定義された一時ディレクトリ以外のディレクトリに一時ファイルを作成するにはどうすればよいですか?

答えて

12
Path.Combine(directoryYouWantTheRandomFile, Path.GetRandomFileName()) 
2

あなたの疑問にお答えしますが、それをコピーしようとする前にストリームを閉じるのではないでしょうか?実際にアクセス権の問題がある場合にストリームを開くと、アクセス許可に基づく問題が発生したようです。

+0

この答えは質問にコメントする必要があります。 – Kent

+1

6年前、私はこの質問に答えてくれたケントに感謝しています。 – Moose

3

また、これを行うにはGetTempFileName Win32 API関数を使用することができます。

<DllImport("kernel32.dll")> _ 
Private Shared Function GetTempFileName(ByVal lpPathName As String, ByVal lpPrefixString As String, ByVal uUnique As Integer, ByVal lpTempFileName As StringBuilder) As Integer 

End Function 

Sub CreateFile() 
    Const path As String = "C:\MyTemp" 
    Const prefix As String = "tmp" 
    Dim fileName As New StringBuilder(576) 
    Dim result As Integer = GetTempFileName(path, prefix, 0, fileName) 
End Sub 
関連する問題