問題タブ [createfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1206 参照

java - ReadDirectoryChangesW用に開かれたディレクトリの最終変更時刻を設定する

ディレクトリツリーの変更を監視する必要のあるJavaプログラムがあります。を使用するJNIコードがありますReadDirectoryChangesW()。ディレクトリは次のように開かれます。

そして、私はに渡しdirHandleますReadDirectoryChangesW()。それはすべてうまく機能します。

問題は、コードの他の部分(Java側)がFile.setLastModified()ファイルまたはディレクトリに「タッチ」するために使用することです(タイムスタンプを「今」に更新します)。これは一般的に機能します。ただし、を使用して開いたディレクトリに「タッチ」しようとすると失敗しますCreateFile()

実際に発生しているWindowsエラーを確認するために、JDKソースを調べて、File.setLastModified()エラーを出力することを追加して、独自のコードで再実装しましたGetLastError()。エラーは次のとおりです。

WTF?同じプロセスです。私も合格FILE_SHARE_READFILE_SHARE_WRITEましたCreateFile()

これを機能させる方法はありますか?

より詳しい情報

File.setLastModified()JDKでのネイティブコードの実装は次のことを行います。

0最初のをに変更するとFILE_SHARE_READ | FILE_SHARE_WRITE、すべて機能します。したがって、JDKの実装は少し壊れているようです。:(

したがって、私の質問は次のようになります。私自身の(再)実装を使用せずにこの作業を行う方法はありFile.setLastModified()ますか?

0 投票する
3 に答える
2245 参照

winapi - COMポートを閉じてすぐに再度開くと失敗します:なぜですか?

ユーザーがcom-portyを実行できるダイアログウィンドウを起動する前に、COMポートの「オープン性」をテストして「飛行前チェック」を実行しようとしています。

アウトラインのコードシーケンスは次のとおりです。

問題は次のとおりです。「DoTheWork」は試行錯誤された関数であり、それ自体で正しく機能します。2番目のCreateFileがE_ACCESSDENIEDを返すときに、以前のCreateFile/CloseHandle呼び出しの直後に呼び出された場合にのみ失敗します。

さらに悪いことに、デバッガーでコードをゆっくりとステップ実行すると、問題なく動作します。

最初のcloseHandleの後にSleep()が必要なようですが、それはハックのように感じます-そして、それがどれくらいの長さでなければならないかを知る方法がありません。

0 投票する
1 に答える
205 参照

visual-c++ - ASCII ファイルの読み取り TAB は NULL に置き換えられます

Visual C++ 2008 で CreateFileA と ReadFile を使用して、ASCII テキスト ファイルを開いてメモリに読み込みます。これは正常に機能します (メモリ内の内容を表示できます) が、1 つの例外があります。何らかの理由で、TAB 文字 (0x09) が NULL (0x00) に変更されています。言うまでもなく、ファイルを解析しようとすると、これは大混乱を引き起こします。これを引き起こしている可能性のあるもの、または修正方法を知っている人はいますか?

これは私がファイルを開く方法です:

私のプロジェクト コードには堅牢なエラー処理があり、エラーは発生していません。任意の提案をいただければ幸いです。

ありがとう。

0 投票する
3 に答える
715 参照

c# - .NET が内部的にエラーをクリアしないのはなぜですか?

次のシナリオを実行しています。

pass は false ですが、重複して実行されているため、予想されます。
問題は、Marshal.GetLastWin32Error() が ERROR_IO_PENDING を返さず、ERROR_ALREADY_EXISTS を返すことです。ファイルを作成したときにエラーが表示されなかったので、これは奇妙です。今、私はアクセスできないように見えるハンドルを閉じる方法を見つけようとしている、または少なくともこれが起こっている理由についての説明を得ようとしています。

編集:わかりました、問題を解決しました。問題の原因はわかっています。

どうやら、内部的に AppendAllText 呼び出しがエラーを引き起こしているようです。このログ呼び出しの後にエラーをリセットする必要がありますか? フレームワークがその関数の内部動作で低レベルの呼び出しをリセットしないことを知っておくと、これは役に立ったと思います。ああ、あなたは毎日何か新しいことを学びます。

私が持っている新しい質問は、この呼び出しの後に低レベルのエラーをリセットする必要があるか、または出力をログに記録する他の方法があるか (log4Net などのサードパーティ ツールを使用したり、Debug.Trace 出力に夢中になったりしないでください) でしょうか? 基本的に、Marshal.GetLastWin32Error(); に影響を与えない追加用のファイルを開く方法。出力。

0 投票する
1 に答える
1729 参照

python - Python CreateFile が PhysicalMemory を見つけられない

Windows 2000 システムの物理メモリにアクセスしようとしています (メモリ ダンプ ツールを使用せずにアクセスしようとしています)。私の理解では、ハンドルを作成するには CreateFile 関数を使用してこれを行う必要があります。これを解決するために、古いバージョンのwin32ddを使用しました。Web 上の他のドキュメントでは、「\Device\PhysicalMemory」または「\\.\PhysicalMemory」のいずれかを使用するように指示されています。残念ながら、それぞれに同じエラーが発生します。

実際には、\\.\PhysicalMemory == 3 および \Device\PhysicalMemory == 2 を実行するたびに返されるエラー番号が異なります。 .

これが私のコードです。これを Windows 2000 で動作させるために py2exe を使用しています (もちろん、正常にコンパイルされます)。DeviceIoControl にも問題がある可能性があることは認識していますが、現在は CreateFile に集中しています。

ありがとう、カッタウェイ

0 投票する
1 に答える
12217 参照

c++ - FILE_FLAG_DELETE_ON_CLOSE フラグを指定した CreateFile

私の問題を説明する前に、私が書いているプログラム (IHExplorer.exe) の説明を次に示します。

これは C++ アプリケーションです。

IHExplorer アプリケーションは、可能な限り Windows エクスプローラー ウィンドウに似た外観にする必要があります。1 つの例外を除き、このエクスプローラー ウィンドウ内からファイルを起動すると、最初にユーザーの一時フォルダーにファイルが復号化され、次にファイル拡張子に関連付けられたアプリが起動され、閉じるときにファイルが削除されます。

私が抱えている問題は、ファイルが閉じられたときの自動削除にあります。シナリオは次のとおりです。

  1. ユーザーは、IHExplorer で暗号化された .txt ファイルをダブルクリックします。
  2. IHExplorer は、メモリ内の .txt ファイルを復号化し、ファイルに HANDLE を返す ::CreateFile を使用して %TEMP% に書き込みます (IHExplorer は、.txt ファイルがシェルで実行されるまで、少なくともこのハンドルを開いたままにしておく必要があります)。

  3. IHExplorer Shell 一時的な場所から .txt ファイルを (::ShellExecute を呼び出して) 実行します。

  4. これで、IHExplorer とメモ帳の両方が、開いているファイルへのハンドルを持ちます。
  5. IHExplorer が最初に閉じた場合でも、IHExplorer とメモ帳の両方がファイルへのハンドルを閉じた場合、ファイルは自動削除される必要があります。

わかった。これは、私が実現したいことを説明する基本的なユーザー ケースです。私が抱えている問題は、::ShellExecute()、メモ帳に「別のプロセスで使用されているため、プロセスはファイルにアクセスできません」と表示されることです。(これは IHExplorer になります)。これを回避し、IHExplorer でハンドルを開いている間でもメモ帳を開く必要があります。

::CreateFile への私の呼び出しは次のようになります。

他のプロセス (メモ帳など) が削除アクセスでファイルを開くことができるように、FILE_SHARE_DELETE を使用したことに注意してください。

FILE_ATTRIBUTE_TEMPORARY | を使用したことに注意してください。FILE_FLAG_DELETE_ON_CLOSE 属性は、ファイルが一時的なものであり、閉じるときに削除する必要があることを示します。

&sa パラメータにも注意してください。これは私が使用している SECURITY_ATTRIBUTES 構造であり、私の問題はここにあると感じています (希望)。もう一度コードを示します。今回は関数全体を投稿して、SECURITY_ATTRIBUTES 構造にどのように入力するかを確認できるようにします。

::CreateFile に渡す正しい SECURITY_DESCRIPTOR を決定すれば、希望どおりに機能する可能性があると思います。助けてください。

ところで、LaunchFile 関数は ::ShellExecute を呼び出してファイルを起動するだけです。

0 投票する
1 に答える
788 参照

c# - ループ内の物理デバイスパスでCreateFileを呼び出す

pInvokeを介してループ(つまり、\。\ PhysicalDrive1、次に\。\ PhysicalDrive2、...)を介して毎回異なる物理デバイスパスでCreateFileを呼び出し、返されたハンドルを使用して他の低レベルを実行するC#コードがあります。 Windowsのもの。ループの終わりに、ハンドルでCloseHandleを呼び出します。

デバッグ中に、ハンドルのint値がループを通過するたびに同じであることに気付きました。これは、予期されたもの(Windowsがハンドルを再利用しているだけ)または予期しないもの(最後のパスでハンドルが解放されなかった)のいずれかであることがわかります。

したがって、これが予期される(または少なくとも正しくない)動作であるかどうかを確認したいだけです。

0 投票する
8 に答える
2780 参照

windows - 純粋なcまたはlinux-shellまたはdos-commandsを使用して超巨大なファイルを作成するにはどうすればよいですか?

私のOSとドライブは

だから、どうすれば秒単位で超巨大なファイルを作成できますか

MappingFile関数を使用するように言われました。2Gでファイルを作成できなかったので...温かいご回答をいただければ幸いです。

0 投票する
2 に答える
4052 参照

c# - fs ドライバーを開くときに CreateFile が失敗する

ファイルシステム ドライバーと通信しようとしています。OpenSCManager、CreateService、および OpenService でドライバーを起動できますが、「CreateFile」を使用しようとすると、常にエラーコード 2 と表示されます (ファイルが見つからないなどだと思います)。

これはコード全体です:

そして私のメイン:

出力は次のとおりです。

DriverLoading と Unloading は正常に動作します (DebugView で確認)。問題は、CreateFile が常に "-1" / "2" と表示されることです。他のドライバーでテストしましたが、同じです。CreateFile でテキストファイルを開くと正常に動作しますが、ドライバー (DeviceIOControl) と通信したいので、ドライバー デバイスを開く必要があります...

誰かが私を助けてくれますか/ヒントをくれますか? ありがとう!