2

「:」、「-」のような文字でファイル名を作成したい。次のコードを試して、ファイル名に日付と時刻を追加しました。

Str.Format(_T("%d-%d-%d-%d:%d:%d.log"),systemTime.wDay ,systemTime.wMonth ,systemTime.wYear,systemTime.wHour,systemTime.wMinute,systemTime.wSecond);

std::wstring NewName=filename.c_str() + Str;

MoveFileEx(oldFilename.c_str(), NewName.c_str(), 2 )

MoveFileExはWindowsErrorCode123(ERROR_INVALID_NAME)で失敗します。したがって、問題は「:」と「-」を含む新しいファイル名にあると思います。

ありがとう、

4

3 に答える 3

3

:実際、 Windowsのファイル名にこの文字を使用することはできません。他のものと交換してください。プログラムが名前に依存している場合は、代替区切り文字を解釈するようにプログラムを変更します。

于 2013-03-25T09:07:52.247 に答える
2

「私は作りたい...」いいえ、あなたはしません。システムが異なれば、ファイル名の有効性に異なる制約が課せられます。最近のほとんどのシステムでは、かなり長い名前(たとえば、100文字以上)が許可されており、形式を強制しません(ただし、Windowsは最後の名前以降は何でも処理しますが.、特にある場合は、注意が必要です。そこの)。移植性に関心がない場合は、使用しているシステムのルールに従うだけです。Unixでは、no'/'または'\0'(ただし、Unixシェルがメタ文字と見なすものはすべて避けます()[]{}<>!$|?*" \。少なくともバックティック)、ファイル名を。で始めるのは避けたいと思います'-'<>:"/\|?*Windowsは、 ;内のすべてを正式に禁止しています。ここに、私は」%、これはシェル変数として解釈できます)。また、があった.場合、final.somethingがシステムにとって意味があることにも注意します。(ファイル名がすでに.logのようなもので終わっている場合は、その前にドットを追加しても問題ありません。)

ほとんどの場合、保守的であることがおそらく最善です。将来どのシステムを使用するかはわかりません。私自身の仕事(Linuxではコロン付きのファイル名を作成し、後でWindowsでは削除することさえできない)では、「-」、「_」、および「_」のみを許可するというルールをほぼ採用しています。英数字(および大文字と小文字のみが異なるファイル名の禁止—私が知っている少数の人々は文字に小文字のみを使用します)。これは、UnixやWindowsだけよりもはるかに制限が厳しいですが、将来がどうなるかは誰にもわかりません。(私が過去に取り組んだいくつかのシステムにとっても、それはあまりにも寛大です。しかし、これらはうまくいけば完全になくなっています。)

于 2013-03-25T09:36:04.570 に答える
2

Windowsでは、ファイル名として作成するための特殊文字はほとんど使用できません。

ただし、現在の日付と時刻を使用してファイル名を作成するには、このフォーマットを使用できます。

CTime CurrentTime( CTime::GetCurrentTime() );
SampleFileName = CurrentTime.Format( _T( " %m_%d_%y %I_%M_%S" ) ) + fileExtension;

タイムフォーマットの詳細については、こちらを参照してください

于 2013-03-26T06:57:46.973 に答える