0

AviManager ライブラリの問題に直面しています。ビデオを保存する AVI ファイルを作成したいのですが、次の行でエラーが発生し続けます。

_aviManager = new AviManager(@"c:\\Recordings\\test.avi", false);

ライブラリを調べると、このメソッドは次のようになります。

public AviManager(String fileName, bool open){
        Avi.AVIFileInit();
        int result;
        if(open){ //open existing file

            result = Avi.AVIFileOpen(
                ref aviFile, fileName,
                Avi.OF_READWRITE, 0);
        }else{ //create empty file

            result = Avi.AVIFileOpen(
                ref aviFile, fileName,
                Avi.OF_WRITE | Avi.OF_CREATE, 0);

        }
        if(result != 0) {
            throw new Exception("Exception in AVIFileOpen: "+result.ToString());
        }
    }

現在ファイルが存在しないため、else 部分に入り、新しいファイルを作成する必要があります。ファイルを作成しますが、結果が値を取ったためにクラッシュします-2147205009。私の質問は、なぜこれを行うのですか?

4

2 に答える 2

0

私は同じ問題を抱えていましたが、これは私の場合、ストリームが適切に破棄されていないことが原因でした (そのため、「*.avi」ファイルを開くとロックされ、次に開くたびにこのエラーが発生しました)。

これを回避するには、必ずすべての AVI オブジェクトを正しい順序で閉じて破棄してください: 正しい:

aviManager.Close();
newStream.GetFrameClose();

また、aviManager=null; のようなすべての「nulling」を削除します。コードの最後からなど(私のマシンでランダムな問題が発生しました)。

それが役立つことを願っています。

于 2013-10-22T13:08:57.607 に答える
0

問題はおそらくパスにあります。C:\Recordingsファイルを作成する前にフォルダを作成していtest.aviますか? 最初にシステムにパスを作成してみてください。

if(!Directory.Exists(path))
   Directory.CreateDirectory(path);

どこ

path = @"c:\Recordings"

(バックスラッシュはいずれの方法でもエスケープされるため、「@」と一緒に「\\」を使用する必要はありません。)

于 2015-09-04T13:56:25.210 に答える