-3

C#を使用して一時ファイルを作成しています。

public partial class frmResults : Form
{
    public static string caseFile = "";

    private void frmResults_Load(object sender, EventArgs e)
    {
        caseFile = CreateTempFiles();
        FileInfo file = new FileInfo(caseFile + ".rpt");

        if (file.Exists)
        {
            try
            {   
                if (fil.Length < 64000000)
                {
                    richTabular.LoadFile(caseFile + ".rpt", RichTextBoxStreamType.PlainText);
                } 
            }
            catch (IOException io)
            {
                MessageBox.Show(io.GetType().Name);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static string CreateTempFiles()
        {
            string sPath;
            caseFile = Path.GetTempFileName();

            sPath = Path.GetTempPath();
            string workDir = sPath + "\\work\\";
            // create work directory
            if (!Directory.Exists(workDir))
            {
                Directory.CreateDirectory(workDir);
            }
            // create temp file name
            int i = 0;
            string tmpfileprefix = workDir + "Rdp";
            string tmpfilename = "";
            do
            {
                i++;
                tmpfilename = tmpfileprefix + i.ToString("D6");
            } while (File.Exists(tmpfilename + ".rpt"));

            caseFile = tmpfilename;
            return caseFile;
        }
    }
}

Error:fil.Length = 'fil.Length'タイプの例外をスローしました 'System.IO.FileNotFoundException' ファイルが見つかりませんでし'C:\Users\sc\AppData\Local\Temp\\work\Rdp000001.rpt'た。

また、if (fil.Exists)falseを返します。

4

2 に答える 2

2

エラーメッセージはこれ以上明確ではありません。

Error:fil.Length ='fil.Length'は、タイプ'System.IO.FileNotFoundException'の例外をスローしました。ファイル'C:\ Users \ sc \ AppData \ Local \ Temp \ work\Rdp000001.rpt'が見つかりませんでした。

つまり...これは有効なFileオブジェクトではありませんが、必要なメソッド(Length)を呼び出すため、例外がスローされました。ファイルが存在しません。

于 2012-07-02T18:20:45.650 に答える
0

このメソッドCreateTempFilesは、まだ作成されていない一時ファイルにのみファイル名を返します。そのメソッドのどこでファイルを作成するかはわかりません。また、そのメソッドのどこにも既存のファイルの名前が取得されないため、常に新しいファイルになります。ただし、本当に安全にしたい場合はif(File.Exists(caseFile + ".rpt"))、長さをチェックする場所の周りにチェックを追加できます。

于 2012-07-02T18:34:17.690 に答える