C# - 访问路径被拒绝,无法访问文件
C# - Access to Path is Denied, unable to access files
我正在做一个项目,将一系列图像存放在内存的一个区域(比如从记忆棒或下载),并根据图像名称将它们分发到各自的文件夹中- 应与各自文件夹中文件的名称相对应。
我编写了代码的前几个函数来实现这一点,并决定通过更改代码来测试它,以便它可以对“我的图片”文件夹中的文件集合执行该过程。
应该发生的是,文件夹中的每个文件都被复制到 AppData 中名为 'New Images' 的文件夹中,并添加到适当的子目录中,或者在必要时创建子目录。
虽然它没有解释原因或如何处理它,但它抛出了一个错误,指出可以访问 C:\Users\mark
。
我认为这可能是访问“我的图片”文件夹的问题,所以我将图像复制到 AppData 文件夹内名为 'Test Images' 的文件夹中(因此程序现在只是在 AppData 中的两个文件夹之间传输文件)。出现同样的错误,我真的不知道下一步该怎么做,我以前在AppData中多次写入和读取文件,但从未遇到过这个问题。我也在这个论坛上阅读了与此相关的各种条目,但似乎无法就下一步该做什么得到明确的答案!
导致异常的代码如下:
//main folder (Contains sub-folders for each patient)
string rootDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\New Images";
//variables for sub-directories cannot be given at this point as they are created using a part of the image name
string subDirectory;
//string subDirectory = Path.Combine(rootDirectory, imageName.Split('_')[0]);
string imageName;
//string imageName = Path.GetFileName(image)
string shortcutDirectory;
//string shortcutDirectory = My Documents + Subfolder name + file name
//list to hold all strings as bitmap image
List<Bitmap> images = new List<Bitmap>();
public void createDirectory()
{
//create filing construct for all files passed in from machines
//if main folder does not exist in AppData
if (!Directory.Exists(rootDirectory))
{
//create it
Directory.CreateDirectory(rootDirectory);
}
}
public void saveLatestImages()
{
//specific path for My Pictures only
string testImagesPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\Test Images";
//if there is a Pictures folder
if (Directory.Exists(testImagesPath))
{
//get number of files in folder
int fileCount = Directory.GetFiles(testImagesPath).Count();
//more than one file in folder
if (fileCount > 0)
{
//create data structures to store file info
//filePaths holds path of each file represented as a string
string[] filePaths = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\Test Images");
//for each file in Pictures...
for (int index = 0; index < fileCount; ++index)
{
//get name of image at current index
imageName = filePaths[index];
//separate the part relating to the patient name (everything before (DD/MM/YYYY))
string subSpecifier = imageName.Split('_')[0];
//add to root directory to form subfolder name
subDirectory = Path.Combine(rootDirectory, subSpecifier);
//subdirectory name formulated, check for pre-existing
//subfolder does not exist
if(!Directory.Exists(subDirectory))
{
//create it
Directory.CreateDirectory(subDirectory); //ERROR OCCURS
}
//otherwise, file will be added to existing directory
//take everything from end and folder\file division to get unique filename
string fileName = imageName.Split('\').Last();
//add this to the existing subDirectory
fileName = Path.Combine(subDirectory, fileName);
//copy the image into the subfolder using this unique filename
File.Copy(imageName, fileName);
//add full filename to list of bitmap images
images.Add(new Bitmap(fileName));
//update the shortcut to the file in the image storage shortcut folder
shortcutDirectory = getShortcut(subSpecifier, fileName);
//delete image at original path (clear folder so images not copied on next load up)
//File.Delete(imageName);
}
}
}
}
如果您能帮助我们了解下一步的方向,我们将不胜感激!
谢谢
马克
暂时授予每个人对您的文件夹的完全权限,并尝试运行您的应用程序作为管理员。
如果可行,那么您可以相应地更改文件夹的权限。还要确保您的文件夹不是只读的。
这是 ASP.net 网络应用程序吗?在那种情况下,您可以尝试向 IIS_IUSRS 帐户提供写入权限。
解决这个问题的技巧是ASP.net模仿。
不要以管理员身份授予完全权限和 运行 您的应用。然后用户将拥有管理员权限,我相信您会希望避免这种情况。
我正在做一个项目,将一系列图像存放在内存的一个区域(比如从记忆棒或下载),并根据图像名称将它们分发到各自的文件夹中- 应与各自文件夹中文件的名称相对应。
我编写了代码的前几个函数来实现这一点,并决定通过更改代码来测试它,以便它可以对“我的图片”文件夹中的文件集合执行该过程。 应该发生的是,文件夹中的每个文件都被复制到 AppData 中名为 'New Images' 的文件夹中,并添加到适当的子目录中,或者在必要时创建子目录。
虽然它没有解释原因或如何处理它,但它抛出了一个错误,指出可以访问 C:\Users\mark
。
我认为这可能是访问“我的图片”文件夹的问题,所以我将图像复制到 AppData 文件夹内名为 'Test Images' 的文件夹中(因此程序现在只是在 AppData 中的两个文件夹之间传输文件)。出现同样的错误,我真的不知道下一步该怎么做,我以前在AppData中多次写入和读取文件,但从未遇到过这个问题。我也在这个论坛上阅读了与此相关的各种条目,但似乎无法就下一步该做什么得到明确的答案!
导致异常的代码如下:
//main folder (Contains sub-folders for each patient)
string rootDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\New Images";
//variables for sub-directories cannot be given at this point as they are created using a part of the image name
string subDirectory;
//string subDirectory = Path.Combine(rootDirectory, imageName.Split('_')[0]);
string imageName;
//string imageName = Path.GetFileName(image)
string shortcutDirectory;
//string shortcutDirectory = My Documents + Subfolder name + file name
//list to hold all strings as bitmap image
List<Bitmap> images = new List<Bitmap>();
public void createDirectory()
{
//create filing construct for all files passed in from machines
//if main folder does not exist in AppData
if (!Directory.Exists(rootDirectory))
{
//create it
Directory.CreateDirectory(rootDirectory);
}
}
public void saveLatestImages()
{
//specific path for My Pictures only
string testImagesPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\Test Images";
//if there is a Pictures folder
if (Directory.Exists(testImagesPath))
{
//get number of files in folder
int fileCount = Directory.GetFiles(testImagesPath).Count();
//more than one file in folder
if (fileCount > 0)
{
//create data structures to store file info
//filePaths holds path of each file represented as a string
string[] filePaths = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\Test Images");
//for each file in Pictures...
for (int index = 0; index < fileCount; ++index)
{
//get name of image at current index
imageName = filePaths[index];
//separate the part relating to the patient name (everything before (DD/MM/YYYY))
string subSpecifier = imageName.Split('_')[0];
//add to root directory to form subfolder name
subDirectory = Path.Combine(rootDirectory, subSpecifier);
//subdirectory name formulated, check for pre-existing
//subfolder does not exist
if(!Directory.Exists(subDirectory))
{
//create it
Directory.CreateDirectory(subDirectory); //ERROR OCCURS
}
//otherwise, file will be added to existing directory
//take everything from end and folder\file division to get unique filename
string fileName = imageName.Split('\').Last();
//add this to the existing subDirectory
fileName = Path.Combine(subDirectory, fileName);
//copy the image into the subfolder using this unique filename
File.Copy(imageName, fileName);
//add full filename to list of bitmap images
images.Add(new Bitmap(fileName));
//update the shortcut to the file in the image storage shortcut folder
shortcutDirectory = getShortcut(subSpecifier, fileName);
//delete image at original path (clear folder so images not copied on next load up)
//File.Delete(imageName);
}
}
}
}
如果您能帮助我们了解下一步的方向,我们将不胜感激!
谢谢 马克
暂时授予每个人对您的文件夹的完全权限,并尝试运行您的应用程序作为管理员。
如果可行,那么您可以相应地更改文件夹的权限。还要确保您的文件夹不是只读的。
这是 ASP.net 网络应用程序吗?在那种情况下,您可以尝试向 IIS_IUSRS 帐户提供写入权限。
解决这个问题的技巧是ASP.net模仿。
不要以管理员身份授予完全权限和 运行 您的应用。然后用户将拥有管理员权限,我相信您会希望避免这种情况。