我正在尝试在驱动器C中创建一个目录:(在win7目标机器上),Directory.CreateDirectory但到目前为止还没有运气.
我相信问题必须与权限安全做点什么......所以我在这里..
如何在驱动器C中创建目录?
我发布了一个问题并在这里得到了答案.这是我在VC2010上调试的代码.我得到了最后显示的运行时错误.使用 sdir有什么问题?
#include<iostream>
#include<stdlib.h>
#include<windows.h>
void make_dir(int depth, char *dir) {
if (depth < 3) {
CreateDirectoryA (dir,NULL);
for (int i = 0; i < 10; i++) {
char *sdir= (char*)malloc(strlen(dir+10)); // XXX 10?
strcpy(sdir, dir);
sprintf(sdir + strlen(sdir), "\\%d", i);
printf("%s\n", sdir);
CreateDirectoryA(sdir,NULL);
make_dir(depth + 1, sdir);
free(sdir);
}
}
}
int main()
{
make_dir(0,"dir");
return 1;
}
Run Code Online (Sandbox Code Playgroud)
错误是:
HEAP [mkdir.exe]:004114E8处的堆块在00411514处修改过去请求的大小为24 Windows已在mkdir.exe中触发了断点.
这可能是由于堆的损坏,这表明mkdir.exe或其加载的任何DLL中存在错误.
这也可能是由于用户在mkdir.exe具有焦点时按下F12.
输出窗口可能包含更多诊断信息.程序'[3008] mkdir.exe:Native'已退出,代码为0(0x0).
环境是Windows 7 Pro和Delphi 7。
Windows.CreateDirectory()无法在远低于路径长度限制的非常长的路径中创建多个文件夹。 GetLastError()返回ERROR_PATH_NOT_FOUND。
ESXi 虚拟机以及本机 Win7 工作站和物理磁盘上的故障是相同的。发生类似的故障Windows.MoveFile()。
下面代码中的长路径是在 CMD 窗口中作为粘贴参数正确创建的MKDIR。
我的解决方法是零碎地创建这条长路。我将 '\' 字符处的路径拆分为一个字符串数组。然后我遍历数组并从每个元素构建累积路径。循环正确构建完整路径而不会出错。
我不知道为什么 Win32 函数无法创建有效的长路径。
var
arrDstPath : TStringArray;
begin
// --------------
// failing method
// --------------
strDstPath := 'C:\Duplicate Files\my customer recovered data\desktop\my customer name\application data\gtek\gtupdate\aupdate\channels\ch_u3\html\images\';
if (Windows.CreateDirectory(pchar(strDstPath),nil) = false) then
Result := Windows.GetLastError; // #3 is returned
if (DirectoryExists(strNewPath) = false) then
Result := ERROR_PATH_NOT_FOUND;
// -----------------
// successful method
// -----------------
strNewPath := '';
LibSplitToArray(arrDstPath,'\',strDstPath); …Run Code Online (Sandbox Code Playgroud) 我试图解析文件夹中的文件名并将部分文件名存储在变量中.校验!然后,我想获取其中一个变量并检查该文件夹名称是否存在于其他位置,以及是否不创建它.如果我使用Write-Host文件夹名称是有效路径,并且文件夹名称不存在,但在执行脚本时,仍未创建文件夹.
如果文件夹不存在,我该怎么办?
$fileDirectory = "C:\Test\"
$ParentDir = "C:\Completed\"
foreach ($file in Get-ChildItem $fileDirectory){
$parts =$file.Name -split '\.'
$ManagerName = $parts[0].Trim()
$TwoDigitMonth = $parts[1].substring(0,3)
$TwoDigitYear = $parts[1].substring(3,3)
$FolderToCreate = Join-Path -Path $ParentDir -ChildPath $ManagerName
If(!(Test-Path -path "$FolderToCreate\"))
{
#if it does not create it
New-Item -ItemType -type Directory -Force -Path $FolderToCreate
}
}
Run Code Online (Sandbox Code Playgroud)